次のコードを取る:
MyEntity e = dao.getEntity(1);
e.setProp1(someVal);
e.setProp2(otherVal);
MyEntity eOld = dao.getEntity(1);
このようにすると、eが更新され(Hibernateがダーティを検出したため)、eOldは同じプロパティ値(prop1、prop2)aeを持ちます。このダーティエンティティの永続化された状態を取得する方法はありますか(データベースにあるように)?
試す:
<property name="defaultAutoCommit" value="false" />
または、別の方法で使用detach
し、永続化する準備ができたら再接続します。
dao.detach(e);
...
e.setProp1("AnotherVal"); //not propatated to the database
dao.merge(cat); // update
実際、私はすでに自分で解決策を見つけているかもしれません...
私はすでにeOldの削除を試みましたが、それ以降は実行されません。eOldを取得する前に、eを削除し、比較(監査用)後にeをセッションに再度アタッチ(マージ)する必要があります。とにかくうまくいくようです。