天天看點

鎖機制有什麼用?簡述Hibernate的悲觀鎖和樂觀鎖機制

有些業務邏輯在執行過程中要求對資料進行排他性的通路,于是需要通過一些機制保證在此過程中資料被鎖住不會被外界修改,這就是所謂的鎖機制。

Hibernate支援悲觀鎖和樂觀鎖兩種鎖機制。悲觀鎖,顧名思義悲觀的認為在資料處理過程中極有可能存在修改資料的并發事務(包括本系統的其他事務或來自外部系統的事務),于是将處理的資料設定為鎖定狀态。悲觀鎖必須依賴資料庫本身的鎖機制才能真正保證資料通路的排他性,關于資料庫的鎖機制和事務隔離級别在

《Java面試題大全(上)》

中已經讨論過了。樂觀鎖,顧名思義,對并發事務持樂觀态度(認為對資料的并發操作不會經常性的發生),通過更加寬松的鎖機制來解決由于悲觀鎖排他性的資料通路對系統性能造成的嚴重影響。最常見的樂觀鎖是通過資料版本辨別來實作的,讀取資料時獲得資料的版本号,更新資料時将此版本号加1,然後和資料庫表對應記錄的目前版本号進行比較,如果送出的資料版本号大于資料庫中此記錄的目前版本号則更新資料,否則認為是過期資料無法更新。Hibernate中通過Session的get()和load()方法從資料庫中加載對象時可以通過參數指定使用悲觀鎖;而樂觀鎖可以通過給實體類加整型的版本字段再通過XML或@Version注解進行配置。