一個典型的倚賴資料庫的悲觀鎖調用:
select * from account where name="Erica" for update
這條 sql 語句鎖定了 account 表中所有符合檢索條件( name="Erica" )的記錄。 本次事務提交之前(事務提交時會釋放事務過程中的鎖),外界無法修改這些記錄。
hibernate 的悲觀鎖,也是基於資料庫的鎖機制實現。
下面的代碼實現了對查詢記錄的加鎖:
String hqlStr = "from TUser as user where user.name='Erica'";
Query query = session.createQuery(hqlStr);
query.setLockMode("user",LockMode.UPGRADE); // 加鎖
List userList = query.list();// 執行查詢,獲取數據
query.setLockMode 對查詢語句中,特定別名所對應的記錄進行加鎖(我們為TUser 類指定了一個別名"user"),這裡也就是對返回的所有 user 記錄進行加鎖。
觀察運行期 Hibernate 生成的 SQL 語句:
select tuser0_.id as id, tuser0_.name as name, tuser0_.group_id as group_id, tuser0_.user_type as user_type, tuser0_.sex as sex from t_user tuser0_ where (tuser0_.name='Erica' ) for update
這裡 Hibernate 通過使用資料庫的 for update 子句實現了悲觀鎖機制。
Hibernate 的加鎖模式有:
Ø LockMode.NONE : 無鎖機制。
Ø LockMode.WRITE : Hibernate 在 Insert 和 Update 記錄的時候會自動 獲取。
Ø LockMode.READ : Hibernate 在讀取記錄的時候會自動獲取。 以上這三種鎖機制一般由 Hibernate 內部使用,如 Hibernate 為了保證 Update過程中對象不會被外界修改,會在 save 方法實現中自動為目標對象加上 WRITE 鎖。
Ø LockMode.UPGRADE :利用資料庫的 for update 子句加鎖。
Ø LockMode. UPGRADE_NOWAIT : Oracle 的特定實現,利用 Oracle 的 forupdate nowait 子句實現加鎖。
上面這兩種鎖機制是我們在套用層較為常用的,加鎖一般通過以下方法實現:
Criteria.setLockMode
Query.setLockMode
Session.lock
注意,只有在查詢開始之前(也就是 Hiberate 生成 SQL 之前)設定加鎖,才會
真正通過資料庫的鎖機制進行加鎖處理,否則,數據已經通過不包含 for update
子句的 Select SQL 載入進來,所謂資料庫加鎖也就無從談起。
相關詞條
-
《鎖沙》
四川出版集團、四川民族出版社出版的長篇小說《鎖沙》講述了老科學家宋一維,北京知青白照群、上官婕以及大學生村官鄭舜帶領曼陀村村民治山、治沙,重建家園的故事...
基本信息 內容簡介 作者簡介 精神啟示 名家推薦 -
樂觀鎖
樂觀鎖機制採取了更加寬鬆的加鎖機制。悲觀鎖大多數情況下依靠資料庫的鎖機制實現,以保證操作最大程度的獨占性。但隨之而來的就是資料庫 性能的大量開銷,特別是...
樂觀鎖介紹 示例 優點 缺點 實現 -
J2EE
簡介J2EE(Java 2 Platform, Enterprise Edition)是一個為大企業主機級的計算類型而設計的Ja...
簡介 發展背景 優勢 結構 四層模型 -
馬上天下[2014年高希希執導電視劇]
劇情簡介該劇改編自徐貴祥原著小說《馬上天下》。1928年大革命時期陳秋石為逃避父親安排的婚姻,在進步青年趙子明的幫助下走上革命道...
劇情簡介 分集劇情 演職員表 角色介紹 音樂原聲 -
馬上天下
內容梗概 鄉紳子弟陳秋石因不滿妻兒醜陋,離家出走,被動參加紅軍,成為一代戰術專家。其子陳三川因家庭變故,同母親流落他鄉,參加...
-
DB2資料庫性能調整和最佳化(第2版)
2045.3.1 悲觀鎖和樂觀鎖 2045.3.2 DB2 V9.5中的樂觀鎖...;深刻理解DB2的鎖及並發機制、索引原理、資料庫參數、最佳化器原理、SQL... 監控鎖等待時間 1043.4.9 監控Lock Chain...
-
Microsoft Jet Database Engine
:悲觀鎖(pessimistic locking)和樂觀鎖(optimistic locking)。如果使用悲觀鎖,當一個加鎖請求發生時目標記錄...悲觀鎖就不會發生這種情況——只要你能成功鎖定目標記錄則更新必然會被執行...
-
企業套用架構模式
465.3 隔離與不變性 475.4 樂觀並發控制和悲觀並發控制...
內容簡介 編輯推薦 作者簡介 目錄 序言 -
《企業套用架構模式》
5.4 樂觀並發控制和悲觀並發控制 48 5.4.1 避免不一致讀...
內容簡介 作者簡介 目錄