簡體   English   中英

Hibernate PersistenceSet 和 Lombok EqualsAndHashCode 問題

[英]Hibernate PersistenceSet and Lombok EqualsAndHashCode issue

我有一個實體,比方說一個使用 Lombok 注釋@EqualsAndHashCode(callSuper = true)的項目,它自動生成equals()hashCode()方法。 這些實體被放在一個HashSet集合中。

問題是,當我從數據庫(Spring JPARepository with Hibernate) PersistentSet代理和我在HashSet中的項目獲取集合時,當我使用Lombok @EqualsAndHashCode方法時, persistentSet.contains(object)返回false 當我的hashCode()返回 1 或其他值但沒有 Lombok自動生成的方法時,它工作正常 -> persistentSet.contains(object)返回true Lombok 自動生成的hashCode()還有什么看起來不錯,因為它返回 session 中給定 object 的常量值。 所以我迷路了。

也許有人知道我們在這里可能錯了什么?

版本:
Hibernate:5.3.9.Final
龍目島:1.18.10
數據庫:MySQL
Spring:5.1.9.RELEASE

通常,根本不連接到 Lombok,Hibernate 實體的equals()方法不應使用所有字段,而應僅使用 ID 字段。 這過於簡單了,但請看一下這個 StackOverflow 問題: How should equals and hashcode be implemented when using JPA 和 Hibernate以及Vlad 的博客文章

我找到了一個原因。 object 屬性之一具有@PostLoad 注釋。 調用“persistentSet”.contains(object) 時,必須在初始化 @PostLoad 注釋屬性之前計算 hascode。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM