2013-11-28 95 views
0

我在行動閱讀休眠和整個以下的Hibernate持久實例

持久化實例來參與交易,其狀態是在交易結束時同步 與數據庫。當事務提交時,通過執行INSERT,UPDATE和DELETE語句將保存在內存中的 狀態傳播到數據庫。此過程也可能發生在其他 次。例如,休眠可能會在執行 查詢之前與數據庫同步。這可以確保查詢知道在交易過程中早些時候做出的更改 。

我無法理解以粗體顯示的行。這種情況何時會出現?如何同步發生。

+0

搜索hibenrnate鎖定和讀取http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch05.html – Deepak

回答

1

同步實際上保存了以前對數據庫所做的更改。要做到這一點,你可以使用flush()方法。

通常你會在另一個sql查詢之前執行此操作,以確保已做出更改。

0

是的,有兩個操作涉及:更新數據庫以反映對持久對象所做的更改;這個操作被稱爲flush。 Hibernate可以在事務中的任何時候調用它,然後提交本身,它需要一個flush來確保數據庫是最新的,並且在底層數據庫中提供一個終止事務的COMMIT。

0

FlushMode.AUTO 在數據庫事務結束時將會話狀態刷新到數據庫的步驟爲 ,這是爲了使更改持久化並且是常見的情況。休眠 不會在每個查詢之前刷新。但是,如果在內存中保存了 會影響查詢結果的更改,則Hibernate默認會首先進行同步。

FlushMode.COMMIT 指定在執行查詢 之前不會刷新會話(只會在數據庫事務結束時刷新會話)。是

FlushMode.NEVER允許您指定僅對flush()結果 進行顯式調用,以使會話狀態與數據庫同步。

參考:春季在行動