Java-如何在Hibernate POJO上正确实现.equals?
我无法在POJO中编写正确的Java-如何在Hibernate POJO上正确实现.equals?,java,hibernate,entity,equals,pojo,Java,Hibernate,Entity,Equals,Pojo,我无法在POJO中编写正确的equals()函数来与hierbante一起使用。我的主要问题是列表的问题 例如,我有一个实体请求,它有一个人的列表 @ManyToMany(cascade = CascadeType.ALL) @LazyCollection(LazyCollectionOption.FALSE) @JoinTable(name = "JOIN_TABLE_REQUEST_TO_PERSON", joinColumns = @JoinColu
equals()
函数来与hierbante一起使用。我的主要问题是列表的问题
例如,我有一个实体请求
,它有一个人
的列表
@ManyToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name = "JOIN_TABLE_REQUEST_TO_PERSON", joinColumns =
@JoinColumn(name = "REQUEST_ID"), inverseJoinColumns =
@JoinColumn(name = "PERSON_ID"))
private List<Person> proxyList = new ArrayList<Person>();
但是,当我将人员添加到列表中时,这无法正常工作。我必须将此代码更改为:
...
if (!this.proxyList.containsAll(proxyList)) {
return false;
}
...
应该如何正确地进行?您还有其他为hibernate编写equals的最佳实践吗?问题就在这里
!this.proxyList.equals(other.proxyList))
它测试的是列表对象而不是单个代理对象的equals方法
在条件内部迭代它们并检查它们是否相等
您为Request
类生成了equals()
方法,因此Netbeans,就像任何其他IDE实现的方法一样,所有实例级引用都应该指向对象的同一个实例,因此它接受proxyList
引用,并使用正在检查的请求的相同属性检查它是否相等
List
(作为一个接口)不实现equals
方法。因此,当您对列表引用调用equals方法时,它基本上会比较两个引用是否指向同一个对象
您的逻辑规定,如果请求中包含的Person
对象相同,则应将两个Request
对象视为相等。然后,这就是您应该如何实现请求equals()
方法的方法。您不能期望IDE为您做到这一点
我不明白你的equals()
问题与Hibernate
之间的联系。在我看来,您的问题似乎是合乎逻辑的,与任何持久性框架都没有关系
我会这样做:
为Person
类实现hashCode
和equals
方法。只考虑那些唯一标识每个人的字段
在请求的equals()
中,除了这个.proxyList.containsAll(proxyList)
之外,我还要检查以确保两个proxyList
实例的大小相同
希望这有帮助。让我知道我是否偏离了基准。是否检查containsAll()
是否正确?@RobertNiestroj No.containsAll()
如果other
是此
的“子集”,也将返回true
。millimoose是真的。否。如果此列表包含您传递的所有元素,则返回true。是的,这里似乎没有必要使用Hibernate。我想知道,当我写Hebernate时,在波霍写的代码> >等于/>代码时,是否还有其他的事情要考虑。对hibernate来说,相等值有什么关系吗?不,不应该。。hibernate使用映射为ID的字段来确定对象的标识。它不使用equals方法。然而,一旦hibernate加载了实例,您就进入了纯Java世界,在纯Java世界中,说两个对象相同的唯一正确方法就是hashCode和equals方法。
!this.proxyList.equals(other.proxyList))