1. 程式人生 > >Hibernate中的事務與併發

Hibernate中的事務與併發

事務的相關概念

什麼是事務

  • 事務是邏輯上的一組操作,組成事務的各個執行單元,操作要麼全都成功,要麼全部失敗
  • 轉賬的例子:小王給小李轉錢,扣錢,加錢,兩個操作組成了一個事務

###事務的特性

  • 原子性------事務的不可分割
  • 一致性----事務執行的前後資料的完整性保持一致
  • 隔離性-----一個事務執行的過程中,不應該受到其他的事務的干擾
  • 永續性----事務一旦提交,資料就永久保持到資料庫中

如果不考慮隔離性:引發一些讀的問題

  • 髒讀----一個事務讀到了另一個事務未提交的資料
  • 不可重複讀-----一個事務讀到了另一個事務已經提交的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>