悲觀鎖
悲觀鎖的實現,通常依賴于數據庫機制,在整個過程中將數據鎖定,其它任何用戶都不能讀取或修改。
舉個例子:
//查詢id=1的那條記錄,使用悲觀鎖
User user = (User)session.load(User.class, 1 , LockMode.UPGRADE);
使用了數據庫中的 for update 鎖定
樂觀鎖
大多數基于數據版本記錄機制(version)實現,一半是在數據庫表加入一個version字段,讀取數據時將版本號一同讀出,之后更新數據時版本號加一,如果提交數據時版本號小于或等于數據庫表中的版本號,則認為數據是過期的,否則給予更新。
其實并非是鎖,是一種沖突檢測 (沒有hibernate也可以使用的,自己要在數據庫中建字段來控制,使用hibernate方便些,封裝好了)
在*.hm.xml中 添加紅色部分:
<class
name="com.tao3c.orm.TbBusinessInfo" table="tb_business_info" optimistic-lock=”version”>
其中version是com.tao3c.orm.TbBusinessInfo類的屬性,hiernbate會去維護的,不用自己去該