hibernate悲觀鎖和樂觀鎖

2021-07-23 04:22:58 字數 639 閱讀 8279

如果資料庫不加鎖,在多個使用者訪問的時候,有可能會造成不可重複讀的問題

(如,兩個使用者進行更新,並且這兩個使用者都先後的拿到了表中的記錄的數值,a使用者更新比

b使用者先更新完,但

b使用者還是按照初始的值進行更新,這時候就會造成不可重複讀

)。此時可以通過hibernate的悲觀鎖機制,對

hibernate

的讀操作進行加鎖(

lockmode.upgrade

),將並行變序列,對讀所操作的記錄行進行加鎖。通過先來先服務的原則,對訪問該記錄的執行緒排隊等候獲得資源

,從而避免了不可重複的問題。

(悲觀鎖不支援懶載入,且

hibernate

發現等待獲得鎖的執行緒等待太長時間,便會產生異常

,不會讓執行緒沒玩沒了的等待,提高效率

,其只適合短事務)。

另外一種解決不可重複讀的問題的方式是通過樂觀鎖。hibernate通過樂觀鎖的版本號來進行衝突檢測。

比如第乙個使用者在執行的時候,第二個使用者也同時在修改,當第乙個使用者獲得資源的時候,版本號被它修改,第二個使用者因為版本號被hibenate修改了,更新的時候資料庫的發現沒有該記錄,所以會出現異常。更新就會失敗。這種機制便保證了在多個使用者並行訪問的時候不會產生不可重複讀的問題。(樂觀鎖支援懶載入)

hibernate悲觀鎖和樂觀鎖

1.悲觀鎖 它指的是對資料被外界修改持保守態度。假定任何時刻訪問資料時,都可能有另乙個客戶也正在訪問同一筆資料,為了保持資料被操作的一致性,於是對資料採取了資料庫層次的鎖定狀態,依靠資料庫提供的鎖機制來實現。基於jdbc實現的資料庫加鎖如下 select from account where nam...

Hibernate 悲觀鎖和樂觀鎖

悲觀鎖 認為在修改資料庫資料的這段時間裡存在著也想修改此資料的事務!樂觀鎖 認為在短暫的時間裡不會有事務來修改此資料庫的資料!悲觀鎖 基於jdbc實現的資料庫加鎖如下 select from account where name erica for update.在更新的過程中,資料庫處於加鎖狀態,...

hibernate的 悲觀鎖和樂觀鎖

hibernate悲觀鎖 指的是對資料被外界 包括本系統當前的其他事務,以及來自 外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定 狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能 真正保證資料訪問的排他性。在資料有載入的時候就給其進行加鎖...