Hibernate的鎖

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的for
update nowait子句實現加鎖。
上面這兩種鎖機制是我們在應用層較爲常用的,加鎖一般通過以下方法實現:
Criteria.setLockMode
Query.setLockMode
Session.lock
注意,只有在查詢開始之前(也就是Hiberate 生成SQL 之前)設定加鎖,纔會
真正通過數據庫的鎖機制進行加鎖處理,否則,數據已經通過不包含for update
子句的Select SQL加載進來,所謂數據庫加鎖也就無從談起。

 

 

Hibernate 在其數據訪問引擎中內置了樂觀鎖實現。如果不用考慮外部系統對數
據庫的更新操作,利用Hibernate提供的透明化樂觀鎖實現,將大大提升我們的
生產力。
Hibernate中可以通過class描述符的optimistic-lock屬性結合version
描述符指定。
現在,我們爲之前示例中的TUser加上樂觀鎖機制。
Hibernate Developer’s Guide Version 1.0
September 2, 2004 So many open source projects. Why not Open your Documents?
1. 首先爲TUser的class描述符添加optimistic-lock屬性:

name="org.hibernate.sample.TUser"
table="t_user"
dynamic-update="true"
dynamic-insert="true"
optimistic-lock="version"
>
……

optimistic-lock屬性有如下可選取值:
Ø none
無樂觀鎖
Ø version
通過版本機制實現樂觀鎖
Ø dirty
通過檢查發生變動過的屬性實現樂觀鎖
Ø all
通過檢查所有屬性實現樂觀鎖
其中通過version實現的樂觀鎖機制是Hibernate官方推薦的樂觀鎖實現,同時也
是Hibernate中,目前唯一在數據對象脫離Session發生修改的情況下依然有效的鎖機
制。因此,一般情況下,我們都選擇version方式作爲Hibernate樂觀鎖實現機制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章