Do not override them; rely on Object.equals() and Object.hashCode()
hashCode()/equals() work
无法识别相同的对象,动态代理的问题
分离实体没有问题
Override them, based on the primary key
hashCode()/equals()坏了
正确的身份(对于所有托管实体)
分离实体的问题
Override them, based on the Business-Id (non-primary key fields; what about foreign keys?)
hashCode()/equals()坏了
正确的身份(对于所有托管实体)
分离实体没有问题
我的问题是:
我是否错过了一个选项和/或优点/缺点?
你选择了什么选项,为什么?
更新1:
By "hashCode()/equals()都坏了”,我的意思是连续的hashCode()调用可能返回不同的值,这(当正确实现时)在以下意义上没有被破坏ObjectAPI 文档,但是当尝试从 API 检索已更改的实体时会导致问题Map, Set或其他基于哈希的Collection。因此,JPA 实现(至少是 EclipseLink)在某些情况下将无法正常工作。
对象标识在以下情况下很难正确实现:
对象被持久化到数据库中。然而,问题源于
完全是因为允许对象在没有 id 的情况下存在
已保存。我们可以通过承担责任来解决这些问题
从对象关系映射框架中分配对象 ID
比如休眠。相反,对象 ID 可以在
对象被实例化。这使得对象标识变得简单并且
无错误,并减少领域模型中所需的代码量。