hibernate悲觀鎖與樂觀鎖的使用

2021-06-14 13:20:22 字數 544 閱讀 7435

hibernate的悲觀鎖與樂觀鎖主要解決資料併發訪問的問題,具體使用場景與區別如下:

悲觀鎖:

適用於:短期事務提交,避免資料丟失

實現:通常依賴於資料庫機制,在整個過程中將資料鎖定,其他任何使用者都不能讀取或修改

**:以user類為例

session.load(user.class,1,lockmode.update);

引數解釋:user.class是修改資料對應的hibernate對映的實體類,1是實體類對應的表的主鍵,lockmode.update是鎖;lockmode是乙個列舉類

缺點:併發性不好

樂觀鎖:

實現:大多數基於資料版本記錄機制(version)實現,一般是在資料庫表中加入乙個version欄位,讀取資料時將版本號一同讀出,之後更新資料時版本號加一,如果提交資料時版本號小於或等於資料庫中的版本,則認為資料是過期的,更新失敗,否則給予更新。

實現方式有二:1.記錄資料的版本號(常用);2.比較讀取時間與更新時間(不常用)

具體實現:

//name對應的是資料庫中的欄位名

Hibernate 樂觀鎖與悲觀鎖

hibernate悲觀鎖通過資料庫底層控制,在sql語句或hql語句後面加句for update 即可實現悲觀鎖的功能 例 select from person where id 1 for update 執行了這條語句,資料庫就把這條記錄給鎖定了,hibernate樂觀鎖 樂觀鎖是通過程式來控制的...

hibernate悲觀鎖 樂觀鎖

1.多個事務併發會出現的錯誤情況 1 dirty read髒讀 讀了其他事務沒有提交的資料 2 none repeatable read不可重複讀 在同乙個事務中讀兩次得到不同的結果 3 phantom read幻讀 在同乙個事務中讀兩次得到不同的結果 針對插入和刪除 為了解決事務併發出現的三個問題...

Hibernate的樂觀鎖與悲觀鎖

鎖 為了保證資料的排他性。悲觀鎖 在整個資料處理過程中,資料處於鎖定狀態。通過資料庫的鎖機制實現。select from account where name erica for update這條 sql 語句鎖定了 account表中所有符合檢索條件 name erica 的記錄。本次事務提交之前...