簡體   English   中英

使用persist()和save()休眠長時間運行的對話

[英]Hibernate long running conversations with persist() and save()

Hibernate文檔指出,與save()相比, persist()對於與Session/Persistence context長時間運行的對話很有用。

堅持()

這在具有擴展會話/持久性上下文的長時間對話中很有用。

救()

在具有擴展的會話/持久性上下文的長時間對話中,這是有問題的。

1)說Persistence context是什么意思?

2)您能否舉例說明什么是long-running conversations 這適用於Web應用程序嗎?

謝謝!

更新: 這篇文章使我對第一個查詢有了清晰的了解- Persistence context為:

在運行時,只要打開和關閉會話,在這些打開和關閉邊界之間,Hibernate就會在持久性上下文中維護對象。 可以將其視為休眠控件的一級運行時緩存。 Hibernate對持久性上下文中管理的實體進行自動的臟檢查和事務后寫。 Hibernate保證此緩存中Java對象身份的范圍。 高速緩存中僅存在一個代表特定數據庫行的對象實例。

對話是最終用戶與UI的交互,以執行業務任務。 這種交互通常會跨越許多UI actions

Hibernate在與Hibernate session關聯的persistence context中管理實體。 有兩種模式可用於將Hibernate后端與UI前端集成:

每個會話的會話 :用戶開始會話時會創建一個休眠會話,並保持活動狀態,直到用戶中止或結束會話。 當后者發生時,事務開始,會話被刷新並關閉,從而將SQL發送到數據庫,事務被提交/回滾。

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

第一種模式可能看起來更有吸引力,但是在實踐中,尤其是當涉及到Web應用程序時,第二種模式是受青睞的,因為除非UI非常簡單,否則它很容易實現。 您可能想看一下如何使用servlet過濾器open session in view模式(每個請求模式的會話的另一個名稱)實現open session in view或者查找您選擇的Web應用程序框架的文檔以了解如何支持此方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM