2011-01-07 5 views
5

enumプロパティを持つマップされたエンティティを持っています。 ログファイルでlokingを実行すると、そのエンティティでselect文を実行するたびに、結果はすぐに更新されます。例えば 私の結果セットが100件のレコードが含まれている場合は、私が持っている:HibernateでEnumを使用すると、select文に続いてupdate文が発生します。

[INFO org... select...] 
[INFO org... update... where id=?] 
[INFO org... update... where id=?] 

....更新= falseの問題が消えるように私は、プロパティをマークすると100倍

を繰り返しました。 列挙型は、よく知られている本からコピーした列挙型コンバータクラスによって割り当てられます。 コードをコピーして貼り付けるだけでよいのか分かりません。ここではhbmファイルでの宣言方法です。

<typedef class="mypackage.HbnEnumConverter" name="the_type"> 
    <param name="enumClassname">mypackage.TheType</param> 
</typedef> 

これを調査する方向を指摘できますか?さらに、休止状態のフィールドでupdate = falseを実行するとどうなりますか?あなたのオブジェクトがダーティとしてマークされている場合、Hibernateが更新を生成します

+0

私の知る限り理解し、ユーザタイプの「よく知られた書籍」ハウスキーピング法を逃しているでは、あなたは( ')、オブジェクトを特に'のequals(Object)をあなたがそれらを適切に実装よろしいですか? – axtavt

答えて

2

感謝。

ログを参照して、ハイバネートがオブジェクトをダーティーとしてマークするかどうかを確認します。

次のような場合は、あなたは、おそらくのためにfalseを返すされているあなたのEnum.equals方法で

class Entity{ 

    public YourEnum getEnum() { 
    return yourEnum==null?YourEnum.SOME_VALUE:....; 
    } 
} 

それとも(NULL、NULL)の場合に等しいですか?

は、Hibernateは、オブジェクトがダーティであるかどうかを決定するための方法を等しく使用するように比べオブジェクトが他の同じ偽である場合、このメソッドがtrueを返す必要が等しいです。

+0

あなたは私に等号(ヌル、ヌル)の問題に関する詳細を教えてください。 – Leonardo

+0

これは特殊なケースではなく、エラーが発生しやすいケースです。 equalsメソッドは、正しい結果を返してオブジェクトが正しくダーティーにマークされるようにする必要があります。 – fmucar

+0

は、Hibernateが使用するオブジェクトが汚れているかどうかを決定する方法を対等に比較オブジェクトがそうでない場合は同じと偽である場合、このメソッドがtrueを返す必要があります等しいです。 – fmucar