1. 程式人生 > >Hibernate事務與併發處理

Hibernate事務與併發處理

1.讀未提交級別(read uncommitted isolation)
         如果設定為這個級別,當某個事務新插入了資料,或者更新修改了資料,但是這個事務還沒有提交。那麼另一個事務能看到這些新插入或者修改的但未提交的資料。如果第一個事務結果是提交失敗,這樣第二個事務select語句的結果就會發生髒讀。所以設定為讀未提交級別不能避免髒讀問題。
2.讀已提交級別(read committed isolation)
         如果設定為這個級別,那麼一個事務只能讀取被提交了的資料。所以如果一個數據在被另一個事務更改而事務未被提交,那麼其他是看不到的。這能夠避免髒讀問題。但是,如果一個事務執行了兩次同一個查詢,但是在兩次查詢期間,其他事務更新或刪除了資料,那麼兩個查詢結果會不一樣,可能出現不可重複讀問題。
3.可重複讀級別(repeatable read isolation)

         如果設定為這個級別,那麼一個事務對資料執行讀取或寫入操作時,鎖定了這些資料行,其他事務不能對資料執行刪除或者更新操作。所以它可以避免讀已提交級別無法避免的不可重複讀問題。但是,其他事務仍然可能插入新的資料,所以有可能發生幻讀問題。
4.序列化事務(serializable)
         執行多個序列事務和一個一個序列地執行,他們的結果一樣,它使用完全與其他事務隔離的事務。比如:如果一個事務已經在操作某行資料了,那麼另一個事務如果也想操作這行,那麼不管它的操作會不會與第一個事務的操作發生衝突,它都必須停下來,等待第一個事務結束,這個事務才能恢復執行。