java - Hibernate JPA 等于 POJO

标签 java hibernate jpa

我有这个实体 POJO,它具有用于 hashcode 和 equals 的 itemlocation 属性。

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/

相关文章:

java - 何时调用 EJB 实体 setter

jpa - JPA中延迟加载和急切加载之间的区别?

java - 如何将 JTextField 的输入转换为 double.输入值来自用户

java - 在我的 pojo 字段中使用 "public"修饰符而不是 "private"是否有任何风险?

mysql - 将 J2EE 应用程序与两个不同的数据库连接

mysql - UNION 与 HQL 中的排序依据

java - 了解实体映射到数据库 View 的删除或更新

java - 配置 log4j 不同的详细程度

java - 阅读网站,就像用户使用 HttpComponents 看到的一样

hibernate - 访问 Spring MVC 应用程序时出错