这里已经有了关于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:
谢谢你的回答——大部分问题都很有质量 不幸的是,我仍然不确定哪种方法最适合实际应用程序,或者如何确定最适合我的应用程序的方法。所以,我将保持这个问题的开放性,希望有更多的讨论和/或意见