2014-01-07 26 views
0

Hibernate documentpersist()相比save()長時間運行的對話與Session/Persistence context休眠長時間運行的對話與堅持()和save()

是有用的堅持()

這是非常有用在長時間運行的會話/持久性上下文中進行對話。

節省()

這與擴展 會話/持久性上下文一個長時間運行的對話問題。

1)當它說Persistence context是什麼意思?

2)能否請您提供一個例子什麼是long-running conversations?這適用於Web應用程序嗎?

謝謝!

更新: This post給了我爲我的第一個查詢清楚的認識 - Persistence context爲:

在每次會話的開啓和關閉,那些打開 和關閉邊界之間運行休眠維持了對象持久性 上下文。把它想象成休眠 控制的第一級運行緩存。 Hibernate並不自動髒檢查和事務 後寫在持久上下文管理的實體。休眠 保證此緩存中的Java對象標識範圍。只有一個 代表一個特定數據庫行對象實例的 緩存中存在。

回答

3

對話是終端用戶與用戶界面進行交互以執行業務任務。這種互動通常會跨越很多UI actions

Hibernate管理與休眠session關聯的persistence context中的實體。有用於Hibernate的後端與UI前端整合兩種模式:

每對話會話:當用戶開始談話,直到用戶中止或完成保持活動創建一個Hibernate會話對話。當後者發生時,事務開始,會話被刷新並關閉,從而將SQL發送到數據庫並且事務被提交/回滾。

每個請求的會話(UI操作):當用戶執行UI操作時創建一個休眠會話。對於事務開始的每個UI操作,將運行涉及此操作的代碼,可刷新和關閉會話,並提交/回滾事務。開發人員負責re-attaching detached entities,如果適用,以前在新會話中進行管理。

第一種模式可能看起來更吸引人,但實際上,特別是在關注Web應用程序時,第二種模式受到青睞,因爲除非UI非常簡單,否則實現起來要容易得多。您可能想了解如何使用servlet過濾器實現open session in view模式(每個請求模式的會話的另一個名稱),或者查看您選擇的Web應用程序框架的文檔以瞭解它如何支持此模式。

另一件需要注意的是如何執行對話隔離(類似的概念與數據庫上的事務隔離)。這涉及兩個用戶同時使用相同數據的用戶可能會覆蓋其他所有更改的可能性。看看時間戳或版本的樂觀鎖定。