我有一个实体类,该实体类具有一个复合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类上没有相等的情况下每次找到相同的实例?
答案 0 :(得分:1)
每个类都有equals
类的默认实现hashcode
和Object
。