2012-03-31 83 views
5

我是休眠的新手。我對交易和沖洗有懷疑..當我們想要堅持一個對象時,我們打開一個會話並開始交易。在堅持其中一個先來,另一個跟着......關於休眠事務和刷新

1)session.getTransaction.commit(); 2)session.flush()

根據我已讀的提交()提交值到數據庫。 flush()將對象狀態同步到數據庫。

這兩者有什麼區別。

回答

8

session.flush()將執行刷新過程,該過程用於對由hibernate會話管理的所有持久對象執行髒檢查。如果某個對象被認爲是髒的(即存儲在該hibernate會話中的任何對象值與數據庫中相應的記錄),hibernate會立即向數據庫發出UPDATE SQLs以同步這些差異,以使存儲在hibernate會話中的對象與相應的數據庫記錄具有相同的值。

但是,只是發佈UPDATE SQL並不意味着修改後的數據實際上保存在數據庫中,您必須提交事務才能確認將修改後的數據保存到數據庫中。也意味着您可以如果在發出UPDATE SQL之後但在提交事務之前發現任何錯誤,則ROLLBACK UPDATE SQL所做的更改。

休眠會話的刷新行爲由FlushMode參數決定,可由session.setFlushMode()進行配置。缺省值是FlushMode.AUTO,因此session.flush()將在提交事務並執行查詢之前自動發生。

所以,當session.getTransaction.commit()被稱爲默認FlushModesession.flush()將被隱式的session.getTransaction.commit()執行之前執行。