Hibernate有何时/如何重写一个很好的和长期的描述
equals()/
hashCode()在文档
要点是,如果您的实体将成为的一部分,
Set或者您要分离/附加其实例,则只需担心它。后者并不常见。前者通常最好通过以下方式处理:
- 基于
equals()
/hashCode()
基于业务密钥-例如,在对象(或至少会话)生存期内不会改变的属性的唯一组合。 - 如果以上操作均不可行,请在设置了主键的情况下基于
equals()
/hashCode()
设置主键,System.identityHashCode()
否则以对象标识为基础。这里的 重要 部分是您需要在将新实体添加到其中并保留后 重新加载 Set;否则,您可能会遇到奇怪的行为(最终导致错误和/或数据损坏),因为您的实体可能会分配给与当前桶不匹配的存储桶hashCode()
。



