这里已经有了关于JPA实体的一些 讨论,以及哪些hashCode()
/equals()
实现应该用于JPA实体类。它们中的大多数(如果不是全部)依赖于Hibernate,但是我想中立地讨论它们的jpa实现(顺便说一下,我使用的是EclipseLink)。
所有可能的实现都有自己的优势和缺点,涉及:
equals()
契约整合(不可变性)用于List
/Set
操作据我所知,有三个选项:
Object.equals()
和Object.hashCode()
hashCode()
/ equals()
工作hashCode()
/equals()
被破坏hashCode()
/equals()
被破坏我的问题是:
通过“hashCode()
/equals()
被破坏”,我的意思是连续的hashCode()
调用可能返回不同的值,这(当正确实现时)在Object
API文档的意义上没有被破坏,但是当试图从Map
、Set
或其他基于哈希的Collection
中检索已更改的实体时,会导致问题。因此,JPA实现(至少是EclipseLink)在某些情况下不能正确工作。
更新2:
谢谢你的回答——大部分问题都很有质量 不幸的是,我仍然不确定哪种方法最适合实际应用程序,或者如何确定最适合我的应用程序的方法。所以,我将保持这个问题的开放性,希望有更多的讨论和/或意见