2011-11-08 9 views
9

dbからエンティティをロードして何とか変更した場合、equals/hashCodeを使用してエンティティの現在の状態をスナップショットと比較して、SQLの更新を実行する必要があるかどうかを判断します。hibernateはequals()とhashCode()をどのように使用しますか?

equalsがtrueを返す場合、エンティティが変更されていないと判断したり、デフォルトの妥協を使用しようとしていると思いますか(確かに)、別の質問があります。

答えて

9

JBossコミュニティWebサイトのEquals and HashCodeを参照してください。そこから:我々は等号()(とhashCode())を実装し、あなたの永続クラスの 属性-unique「セミ」を使用することをお勧めします。この問題を回避するために

。 基本的には、データベース識別子は というビジネス上の意味を持たないと考えるべきです(サロゲート識別子の属性と は自動的に生成される値を使用することをお勧めします)。データベース identifierプロパティはオブジェクト識別子である必要があります。基本的には をHibernateで使用する必要があります。もちろん、便利な読み取り専用ハンドルとして データベース識別子を使用することもできます。 Webアプリケーションで リンクを構築する

つまり、Hibernateは、アイデンティティにequalsとhashCodeを使用します。オブジェクトが変更されているかどうかはわかりません。これは、属性ごとの属性比較を使用します。

+1

この引用とページでは、Hibernateがequals()とhashCode()を使用しているという証拠は見られません。 – Lu55

3

Hibernateのエキスパートではありませんが、thisのマニュアル啓発のセクションがあります。

関連する問題