为了等于和哈希码或不在实体类,这是问题

我一直试图推断最好的方式来处理在实体上实现散列码和等于(通常意义上的实体,但在大多数情况下,它将是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...

我已经在大规模(或至少在大量使用休眠的应用程序)之前尝试过这一点。 是个好主意。

.equals和.hashcode只包含这些自然键是有意义的,但是如果你有多个同一实体的实例(相同的自然ID,因此相同的散列码)呢? 看起来这种做法可能会在你的应用程序的其他地方产生微妙的影响。

这是它的意思。 在比较.equals时,您通常希望同一个实体的多个实例成功,并且是的,它在别处有影响。 海事组织的这些影响是,事情会按预期工作。

链接地址: http://www.djcxy.com/p/37003.html

上一篇: To equals and hashcode or not on entity classes, that is the question

下一篇: JPA EntityManager: Why use persist() over merge()?