session.lock(obj, LockMode.NONE);
//do a version check, then reassociate
session.lock(obj, LockMode.READ);
//do a version check, using SELECT ... FOR UPDATE, then reassociate
session.lock(obj, LockMode.UPGRADE);
理解如下:
對於LockMode.NONE,只進行綁定,如果obj對象庫中無對應數據,也不報異常
對於LockMode.READ,先檢查版本,用於用version實現樂觀鎖的情況,如果加鎖時version舊了,則拋出異常,這種加鎖的目的除了綁定,還有判斷cache中數據是最新的數據,如果obj對象庫中無對應數據,也報異常
對於LockMode.UPGRADE,也做版本檢查,同時用for update對錶中記錄加鎖,也就是說加鎖的目的是爲了獨佔式修改,如果obj對象庫中無對應數據,也報異常