我有这个实体 POJO,它具有用于 hashcode 和 equals 的 item 和 location 属性。
List<POJO> pojos = pojoRepository.findAll();
然后我创建一个查找 POJO 对象,
POJO pojo = new POJO(item, location);
但是当我尝试执行pojos.contains(pojo)
时,它返回 false。
所以我在 pojo equals
方法中添加了调试信息。
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass()) {
System.err.println("xxxxxxxxxx");
System.err.println(getClass());
System.err.println(obj.getClass());
System.err.println("xxxxxxxxxx");
return false;
}
输出返回
xxxxxxxxxx
class com.demo.entity.Pojo
class com.demo.entity.Pojo_$$_jvst83f_19
xxxxxxxxxx
如何使其相等?我还尝试了 obj instanceof Pojo ,但仍然返回 false。
最佳答案
这是因为 hibernate 在内部创建了 proxy
类。查询返回的是模仿实体类型的代理实例。这就是为什么它不是 Pojo
而是内部代理类 _jvst83f_19
跳过类比较并仅比较属性。
您也可以尝试类似的方法:
getClass().inInstance(obj)
关于java - Hibernate JPA 等于 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50364587/