如果ID不等于Hibernate,冬眠如何在同一会话中找到同一对象

时间:2018-10-06 11:42:18

标签: hibernate jpa

我有一个实体类,该实体类具有一个复合ID,并且实体类或复合ID类的覆盖均不相等,但是如果CompositeId字段的值相同,则findById(compositeId)在同一会话中返回相同的对象。 它不能使用某些代理来定义equals,因为如果这样做,它也会在另一个会话中返回相同的对象,但是在另一个会话中,返回的结果将不是同一实例。

代码示例

comparable

}

实体也没有等于

@Embeddable
public class CompositeKey implements Serializable{
    @NotBlank
    private String partKey1;

    @NotBlank
    private String partKey2;
//getter setter

在同一会话中,使用CompositeKey的不同实例的调用将返回相同的实例(如果CompositeKey的字段的值相同)。 在不同的会话中,即使CompositeKey的字段值相同,它也会返回不同的实例 我可以按照控制器中的代码片段进行验证

    @Entity
    @Table(name = "testentity")
    public class TestEntity {

        @EmbeddedId
        private CompositeKey cid;

        @NotBlank
        private String otherFields;
//getter setter
}

我在这里的问题是在同一会话中,如何在复合ID类上没有相等的情况下每次找到相同的实例?

1 个答案:

答案 0 :(得分:1)

每个类都有equals类的默认实现hashcodeObject