JPAを使用して、特に永続化されていない新しく作成されたエンティティについて、equals()
およびhashcode()
という問題が発生しました。EclipseLinkを使用したJPAエンティティのequals()およびhashcode()
私はstackoverflowの中に次のような答えが見つかりました:この回答のHibernateセッションに関する協議を
Should I write equals() methods in JPA entities?
を。私はHibernate(しかし、EclipseLink)を使用せず、これらの "セッション"のようなJPAプロバイダの実装の詳細についてはわかりません。
私の質問は、JPAに関してHibernateセッションとは何ですか?または、より具体的には、equals()
とhashcode()
を上書きしないと、同じエンティティを表す2つのオブジェクト(存在する場合は同じビジネスキー)が「等しい」という問題に遭遇します(これはequals()
を意味します)。偽)?
は、これらの問題になっていないと十分で同じEntityManagerインスタンスを使用します
注意を(「セッション」と「EntityManagerのは」この文脈での等価を使用することができ、これは意味を、?):私は、使用可能なを持っていませんすべてのテーブルのビジネスキーのため、equals()
およびhashcode()
のビジネスキー属性を使用するソリューションは適用できません。
これは権威ある答えです:[Jamesのプロフィールを参照](http://stackoverflow.com/users/416206/james)! – Arjan
@James:EclipseLinkが常にIDセットを使用することは(まだ)真実ですか?特に悪いhashCode実装があり、削除時に大きなパフォーマンス上の問題が発生しています。 UnitOfWorkImplのコードを見ると、バニラのHashMap/HashSetsを使って削除依存関係をすべて追跡していることがわかります。それはバグですか、それとも設計ですか?いずれにしても、EclipseLinkはこれらのメソッドから何も必要としないという考え方と矛盾しているようです。 –