我一直在努力尝试最好的方法来处理在实体上实现哈希码和相等是否是一般的好习惯(我指的是一般意义上的实体,但在大多数情况下,它将是JPA实体)。
在Hibernate手册的第24章http://docs.jboss.org/hibernate/core/3.3/reference/en/html/best- practices.html中,它表示了这一点…
确定所有实体的自然键,并使用映射它们。实现equals()和hashCode()来比较组成自然键的属性。
拥有.equals和.hashcode仅包含这些自然键是有意义的,但是如果您拥有同一实体的多个实例(相同的自然ID,因此相同的哈希码)怎么办?似乎这种做法可能会对您的应用程序中的其他地方产生微妙的影响。之前有人大规模尝试过吗?
有时您希望Equals比较所有属性,而有时您希望Equals只是关键。使用显式的帮助程序类,我们获得了更多的成功,因此在比较什么方面没有歧义。
ByKeyComparer.Equals... ByPropertiesComparer.Equals...
要么
Entity1.EqualsByKey... Entity1.EqualsByProperties...