Hibernate JPA等于POJO

时间:2018-05-16 07:17:37

标签: java hibernate jpa

我有这个实体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。

1 个答案:

答案 0 :(得分:1)

这是因为hibernate在内部创建了Pojo类。什么查询返回代理模仿实体类型的实例。这就是为什么它不是_jvst83f_19而是内部代理类getClass().inInstance(obj)

跳过类比较并仅比较属性。

您也可以尝试这样的事情:

@Configuration
public class NewConfiguration {

    @Primary
    @Bean
    public InterfaceType overrideBean() {
        return new InterfaceTypeImpl();
    }
}