使用JPA,我偶然發現了equals()
和hashcode()
的問題,特別是對於尚未保留的新創建的實體。使用EclipseLink的JPA實體的equals()和hashcode()
我發現在計算器如下回答:
Hibernate的會話Should I write equals() methods in JPA entities?
這個答案會談。我不使用Hibernate(但EclipseLink),我不知道JPA提供者的實現細節,比如這些「會話」。
我的問題是,根據JPA什麼是Hibernate會話?或者更具體地說:如果我不覆蓋equals()
和hashcode()
,在這種情況下,我會遇到代表同一實體的兩個對象(如果存在相同業務密鑰)不相等的問題(這表示equals()
返回假)?
將使用同一EntityManager實例足以沒有得到這些問題
注意(這意味着,可以在「會話」和「EntityManager的」在此背景下使用的相同呢?)我沒有可用所有表的業務密鑰,因此無法應用equals()
和hashcode()
中使用業務密鑰屬性的解決方案。
另外,至於這是一個權威的答案:[見詹姆斯的個人資料](http://stackoverflow.com/users/416206/james)! – Arjan
@James:EclipseLink總是使用標識集(是)(仍)是否正確?我們有一個特別糟糕的hashCode實現,並且在刪除時遇到了巨大的性能問題。查看UnitOfWorkImpl的代碼,我發現刪除依賴關係都是使用vanilla HashMap/HashSets進行跟蹤的。這是一個錯誤還是設計?無論哪種方式,似乎與EclipseLink不需要這些方法中的任何內容的想法相矛盾。 –