Hibernate控制的事務
事務保證原子操作的不可分,也就是操作的同時成功或同時失敗。
hibernate的事務隔離級別和JDBC中大致相同。
設置時要在hibernate.cfg.xml配置
<property name="hibernate.connection.isolation">4</property>
1: 讀未提交的數據(Read uncommitted isolation) 髒讀
2: 讀已提交的數據(Read committed isolation) 不可重複讀
4: 可重複讀級別(Repeatable read isolation) 幻讀
8: 可串行化級別(Serializable isolation)
hibernate的鎖(悲觀鎖,樂觀鎖)
1.悲觀鎖是由數據庫本身所實現的,會對數據庫中的數據進行鎖定,也就是鎖行。(更新期間不許其他人更改)
LockMode.UPGRADE,修改鎖,在get()方法中加上這個設置作爲第三個參數。
LockMode.NONE 無鎖機制
LockMode.READ 讀取鎖
LockMode.WRITE 寫入鎖,不能在程序中直接使用
還可以使用Session.lock() Query.setLockMode() Criteria.setLockMode()方法來設置鎖,
檢測版本號,一旦版本號被改動則報異常。
2.樂觀鎖,也就是通過對記錄加上某些信息來解決併發訪問的問題。(認爲更新期間不會有其他更改)
版本檢查;要在其表中多加上一列表示版本信息,會在讀取時讀到這個版本號,並在修改之後更新這個版本號;
更新瞬間加鎖,並且只有版本號相同纔會予以更新,如果版本號不同,就會拋出例外。
<version name="version" column="version" type="integer" />