Hibernate中的事務與併發
阿新 • • 發佈:2018-12-13
事務的相關概念
什麼是事務
- 事務是邏輯上的一組操作,組成事務的各個執行單元,操作要麼全都成功,要麼全部失敗
- 轉賬的例子:小王給小李轉錢,扣錢,加錢,兩個操作組成了一個事務
###事務的特性
- 原子性------事務的不可分割
- 一致性----事務執行的前後資料的完整性保持一致
- 隔離性-----一個事務執行的過程中,不應該受到其他的事務的干擾
- 永續性----事務一旦提交,資料就永久保持到資料庫中
如果不考慮隔離性:引發一些讀的問題
- 髒讀----一個事務讀到了另一個事務未提交的資料
- 不可重複讀-----一個事務讀到了另一個事務已經提交的update資料,導致多次查詢結果不一致。
- 虛讀----一個事務讀到了另一個事務已經提交的inset資料,導致多級查詢機構不一致。
通過設定資料庫的隔離級別來解決上述讀的問題
- 未提交讀:以上的讀的問題都有可能發生
- 已提交讀:避免髒讀,但是不可重複讀,虛讀都有可能發生
- 可重複讀:避免髒讀,不可重複讀,但是虛讀是有可能發生
- 序列化:以上讀的情況都可以避免
如果想在Hibernate的框架中來設定隔離級別,需要在Hibernate.cfg.xml的配置檔案中通過標籤來配置
- 通過:hibernate.connection,isolation = 4 來配置
- 取值:
- 1——Read uncommitted isolation
- 2——Read commited isolation
- 4——Repeatable read isolation
- 8——Serializable isolation
<!--設定資料庫的隔離級別,就使用預設值就OK-->
<property name="hibernate.connection.isolation">4</property>