2012-04-26 78 views
0

考慮下面的代碼:休眠:髒實體獲取持續狀態

MyEntity e = dao.getEntity(1); 
e.setProp1(someVal); 
e.setProp2(otherVal); 

MyEntity eOld = dao.getEntity(1); 

如果我不喜歡這樣,那麼E將得到更新(因爲Hibernate檢測它是髒)和EOLD將具有相同的屬性值( prop1,prop2)a。有沒有辦法獲得這個髒實體的持久狀態(就像它在數據庫中一樣)?

回答

0

其實我可能已經找到了解決辦法自己...

我已經嘗試驅逐EOLD但不會使,因爲我需要檢索EOLD前驅逐e和之後的比較(用於審計)再次將e重新附加到會話中。 它似乎在任何情況下工作。

2

嘗試:

<property name="defaultAutoCommit" value="false" /> 

或選擇使用detach當重新連接準備堅持。

dao.detach(e); 
... 
e.setProp1("AnotherVal"); //not propatated to the database 
dao.merge(cat); // update 
+0

TX,但我希望的那麼激烈:-) – 2012-04-26 19:42:13

+0

使用分離,當你準備好傳播的替代合併的東西。 – Bitmap 2012-04-26 19:56:58

+0

是的,這是我第一次的做法,但我放棄了,因爲這樣我必須驅逐(分離)在我的控制器,而不是我的服務(因爲性質在控制器設置)。但如果服務後驅逐行不通,我可能不得不回到這一點。 – 2012-04-26 20:16:06