Hibernate lock方法:以指定的鎖定模式進行鎖定

2020-07-16 10:04:57
lock 方法用來將指定的實體類物件以指定的鎖定模式進行鎖定。

語法:

lock(Object object,LockMode lockMode)

引數說明:
  • object:一個實體類的物件。
  • lockMode:鎖定模式,可用的值如表所示。

LockMode類提供的集中鎖定模式
鎖定模式 功能簡介
LockMode.NONE 表示無鎖機制,是Hibernate的預設值。採用這種方式首先在Hibernate快取中檢索,存在則直接返回物件的參照;否則到資料庫中載入物件
LockMode.READ 無論Hibernate快取中是否存在,總是直接到資料庫中載入。如果對映檔案中設定了版本元素,則比較快取中物件的版本與資料庫中記錄的版本是否一致
LockMode.UPGRADE 在LockMode.READ模式的基礎上,如果資料庫系統支援悲觀鎖(如Mysql和Oracle),則執行select...for update語句,否則執行普通的select語句
LockMode.UPGRADE_NOWAIT 在上一模式的基礎上,如果是Oracle資料庫,則執行select...for update nowait語句,nowait作用是:如果執行該select語句的事務不能立刻獲得悲觀鎖,會立刻丟擲鎖定異常,而不會去等待其他事務釋放鎖定

範例

應用 get 方法獲取實體類的物件,並使用 LockMode.READ 模式鎖定該物件,關鍵程式碼如下:
UserForm uf = new UserForm();  //定義儲存實體類物件的JavaBean物件
uf = (UserForm)session.get(UserForm.class,1);  //獲取編號為1的使用者資訊
session.lock(uf,LockMode.READ);  //鎖定Lock物件