使用 JPA 和 Hibernate 时应如何实现等于和哈希码
如何在Hibernate中实现模型类的等式和哈希码?常见的陷阱是什么?在大多数情况下,默认实现是否足够好?使用业务密钥有什么意义吗?
在我看来,当考虑到懒惰获取,id生成,代理等时,很难在每种情况下都正确工作。
如何在Hibernate中实现模型类的等式和哈希码?常见的陷阱是什么?在大多数情况下,默认实现是否足够好?使用业务密钥有什么意义吗?
在我看来,当考虑到懒惰获取,id生成,代理等时,很难在每种情况下都正确工作。
Hibernate在文档中对何时/如何覆盖/有很好的详细描述equals()
hashCode()
它的要点是,您只需要担心您的实体是否是a的一部分,或者如果您要分离/附加其实例。后者并不常见。前者通常最好通过以下方式处理:Set
equals()
hashCode()
equals()
hashCode()
System.identityHashCode()
hashCode()
我不认为接受的答案是准确的。
要回答原始问题:
在大多数情况下,默认实现是否足够好?
答案是肯定的,在大多数情况下确实如此。
您只需要覆盖并且实体将在(这是非常常见的)中使用,并且实体将从休眠会话中分离并随后重新附加到休眠会话(这是休眠的不常见用法)。equals()
hashcode()
Set
接受的答案指示如果任一条件为真,则需要重写这些方法。