hibernate的 悲觀鎖和樂觀鎖

2021-06-05 05:23:42 字數 777 閱讀 8481

hibernate悲觀鎖:指的是對資料被外界(包括本系統當前的其他事務,以及來自

外部系統的事務處理)修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定

狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制(也只有資料庫層提供的鎖機制才能

真正保證資料訪問的排他性。

在資料有載入的時候就給其進行加鎖,直到該鎖被釋放掉,其他使用者才可以進行修改,優點:資料的一致性保持得很好,缺點:不適合多個使用者併發訪問。當乙個鎖住的資源不被釋放掉的時候,這個資源永遠不會被其他使用者進行修改,容易造成無限期的等待。

lockmode.none : 無鎖機制。

lockmode.write :hibernate在insert和update記錄的時候會自動 獲取。 

lockmode.read : hibernate在讀取記錄的時候會自動獲取。

hibernate樂觀鎖:就是在對資料進行修改的時候,對資料才去版本或者時間戳等方式來比較,資料是否一致性來實現加鎖。優點比較好。

相對悲觀鎖而言,樂觀鎖機制採取了更加寬鬆的加鎖機制。悲觀鎖大多數情況下依 靠資料庫的鎖機制實現,以保證操作最大程度的獨占性。但隨之而來的就是資料庫 效能的大量開銷,特別是對長事務而言,這樣的開銷往往無法承受。 如乙個金融系統,當某個操作員讀取使用者的資料,並在讀出的使用者資料的基礎上進 行修改時(如更改使用者帳戶餘額),如果採用悲觀鎖機制,也就意味著整個操作過 程中(從操作員讀出資料、開始修改直至提交修改結果的全過程,甚至還包括操作 員中途去煮咖啡的時間),資料庫記錄始終處於加鎖狀態,可以想見,如果面對幾 百上千個併發,這樣的情況將導致怎樣的後果。

hibernate悲觀鎖和樂觀鎖

如果資料庫不加鎖,在多個使用者訪問的時候,有可能會造成不可重複讀的問題 如,兩個使用者進行更新,並且這兩個使用者都先後的拿到了表中的記錄的數值,a使用者更新比 b使用者先更新完,但 b使用者還是按照初始的值進行更新,這時候就會造成不可重複讀 此時可以通過hibernate的悲觀鎖機制,對 hiber...

hibernate悲觀鎖和樂觀鎖

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

Hibernate 悲觀鎖和樂觀鎖

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