0

我有一个实体,比方说一个使用 @EqualsAndHashCode(callSuper = true)自动生成equals()hashCode()方法的 Lombok 注释的项目。实体被放在一个HashSet集合中。

问题是,当我从数据库(Spring JPARepositorywith Hibernate)PersistentSet代理获取包含我的项目的集合HashSet时,当我使用Lombok@EqualsAndHashCode时,该方法 persistentSet.contains(object)返回false. 当我hashCode()返回 1 或其他值但没有 Lombok自动生成的方法时,它可以正常工作 ->persistentSet.contains(object)返回true。Lombok 自动生成的其他内容hashCode()似乎也很好,因为它返回会话中给定对象的常量值。所以我迷路了。

也许有人知道我们在这里可能错了什么!?

版本:
休眠:5.3.9.Final
Lombok:1.18.10
数据库:MySQL
Spring:5.1.9.RELEASE

4

1 回答 1

0

我找到了一个原因。其中一个对象属性有一个@PostLoad 注释。调用“persistentSet”.contains(object) 时,必须在初始化 @PostLoad 注释属性之前计算 hascode。

于 2019-11-05T11:02:52.533 回答