2012-07-02 84 views

回答

5

將JDBC連接的狀態與保存在內存中的對象的狀態同步的過程稱爲flush。

這發生在視FlushMode設置以下幾點:

  • 在某些查詢執行時FlushMode.AUTO(這是默認值)。
  • 從org.hibernate.Transaction.commit()時FlushMode.COMMIT
  • 在Session.flush()

的主要區別是,當FlushMode設置爲COMMIT,提交()刷新會話並且還會結束工作單元,並且無法回滾事務,因爲flush()只會執行會話的正常同步。

FlushMode

更多info

1

Hibernate docs

沖洗是同步基礎持久 存儲在存儲器中保持持久化狀態的過程。

在閱讀上面的陳述後,上面的陳述讓一些可能會得到下一個問題(即差異b/w然後刷新和提交)的人感到困惑。

Flush就像實際執行語句但不提交它。例如: - 您打開任何SQL執行工具,如oracle SQLdeveloper,打開會話並激活更新語句。打開新的sql會話,除非您在第一次會話中提交,否則您將不會看到更新。所以查詢在特定的oracle會話中執行但未提交。

當您調用hibernate save(或update)時,並不意味着底層查詢會同時執行。它通常在提交完成時顯式或事務結束時執行。但是有些場景(比如獲取分配給瞬態對象的ID,以控制Hibernate會話的大小,就像在批量更新中一樣,否則您可以從mem異常中獲取),而不是提交它們。同花順在這裏幫助

+0

因此,沖洗就像執行一個聲明與自動提交錯誤? –

+0

是的你是對的。 –

相關問題