2016-09-29 132 views
-1

當從DB讀取並編輯了對象但保存過程中的對象時,我會決定是保存還是丟棄數據。但JPA/Hibernate會自動保存編輯後的數據(Auto Flush)。JPA-Hibernate保存未保存的數據

DB.beginTransaction 
try{ 
    MyObject myObj = DB.readMyObject(); 
    myObj.setCurrentTime(System.currentTimeinMills()); 

    MyObject myObj1 = DB.readMyObject(); 
    myObj1.setCurrentTime(System.currentTimeinMills()); 

     // myObj Edited. 
     // myObj1 Edited. 

    if(isPermittedToSave()){ 
      DB.persist(myObj); 
    } 
    DB.persist(myObj1); 

    DB.commitTransaction(); 
} Catch(Exception e) { 
    DB.rollbackTransaction(); 
} 

我會一直堅持「myObj1」。所有這些過程必須在單個事務下運行。

我該怎麼做才能禁用JPA/Hibernate的這種行爲。該解決方案還應該能夠執行Lazy Fetch並更新「myObj」。

回答

0

我決定是保存還是丟棄數據。

這是長期運行的交易將派上用場的地方。如果您決定堅持更改,請提交交易。如果您決定放棄更改 - 回滾事務。

自動沖洗設置在這裏不相關。另一方面,自動提交需要被禁用。

+0

親愛的@Antoniossss感謝您的快速回復。你能建議我解決這個問題嗎?謝謝。 – sam

+0

只要開始事務,完成你的工作,然後提交,如果你想保留更改或回滾,如果你想放棄它們。 – Antoniossss