怎麼實現hibernate悲觀鎖和樂觀鎖

隔離級別的安全控制是整體一個大的方面,而鎖機制更加的靈活,它執行的粒度可以很小,可以在一個事務中存在。
Hibernate悲觀鎖是依靠底層數據庫的鎖機制實現,在查詢query.setLockMode(),
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

悲觀鎖會帶大量的性能開銷。樂觀鎖是Hibernate在內存實現的,提供了3種實現:
1.基於version:讀取出數據時,將此版本號一同讀出,之後更新時,對此版本號加一
2.基於timestamp:
樂觀鎖只須在<hibernate-mapping>配置中配置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章