傳智播客學習之Hibernate事務管理和併發控制

2021-05-21 18:12:07 字數 1702 閱讀 8476

hibernate作為乙個功能完善的

orm框架,它對應用程式中的事務管理和併發控制提供了完善的解決方案,下面我們共同分享一下

hibernate

一、事務管理

1.事務介紹

事務就是作為單個工作單元執行的一組資料操作,這些操作要麼同時成功,要麼同時失敗,以保證資料的一致性和完整性。事務具有acid

屬性。

a:atomic

,確保在事務中所有操作要麼都發生,要麼都不發生。

c:consistent

,一旦乙個事務結束,系統所處的狀態和他的業務規則是一致的。

i:isolated

,事務允許多個使用者操作同乙個資料,乙個使用者的操作不會和其他使用者的操作混淆。

d:durable,一旦事務完成,事務的結果應該持久化。

2.hibernate應用程式中的事務管理

1)hibernate中使用

jdbc事務

hibernate預設

jdbc

事務,在

hibernate.cfg.xml

中設定hibernate.transaction.factory_class

為jdbctransactionfactory

,然後在**中處理方式如下:

trycatch(

exception e

).......

2) 使用

jta事務

二、併發控制

1.資料庫事務併發引起的問題

1)丟失更新

2)兩個事務更新同一行,另乙個事務異常回滾,導致兩處變化都丟失。

3)髒讀

乙個事務讀到另乙個事務未提交的更改資料

4)不可重複讀

乙個事務兩次讀取同一行資料,兩次資料不同

5)幻讀

乙個事務前後執行乙個查詢兩次,在第二個結果集中包括第乙個結果中不可見得行,或者包括刪除的行。

2.事物隔離級別

為了解決多個事務併發會引起的問題,讓使用者根據需要在事務的隔離性和併發性之間做合理的權衡,資料庫提供了四種事務隔離級別,分別用1

(read uncommited),2

(read commited),4

(repeatable read),8

(serializable

)來表示。

注意:隔離級別越高,雖然能保證資料的完整性和一致性,但是對併發效能的影響也越大,對大多數應用程式,優先考慮設為read committed

(讀已提交)。

在hibernate.cfg.xml

中設定hibernate.connection.isolation

為相應值即可

3.樂觀併發控制

樂觀併發控制只在工作單元結束後產生錯誤.

多使用者應用通常會預設採用樂觀併發控制以及 

與資料庫連線採用讀已提交的隔離級別.

在特定的相應時刻可獲得附加的這一隔離級別.比

如要求進行乙個可重複的讀,

這一方案能夠確保最佳的效能和擴充套件性.

樂觀鎖是假定當前事務操縱資料資源時,沒有其他事務同時訪問該資料資源,不做資料庫層次上的鎖定,為了保證正確的資料,樂觀鎖使用應用程式的版本控制來避免可能出現的併發問題的發生。或者使用時間戳來檢測更新衝突。

4.悲觀併發控制

悲觀鎖假定當前事務操縱資料資源時,一定有其他事務同時訪問該資料資源,為了避免當前事務的操作受到干擾,先鎖定資源。

傳智播客學習有感

來傳智播客學習幾個月了,學習的很差,為什麼呢,我曾經這麼回答過,如果乙個人曾經很輕鬆的賺過錢,然後某天他改行做程式設計了,那麼是一件很折磨人的事情,寫 絕對不是一件輕鬆的事情,很容易疲倦,也很容易煩躁不安,我在傳智播客學習了幾個月說真的學的很差,動手太差,只侷限於聽,導致的結果是做乙個簡單的html...

傳智播客mysql分頁的實現 傳智播客 分頁

整理了一宿,終於找到了頭緒,在頭腦還算清醒時,整理下分頁的筆記.我這個分頁用的是oracle的資料庫.他在查詢時涉及到了乙個偽列.table名為 employees.建立bean物件employee.屬性如下 private int employee id private string first ...

傳智播客學習筆記4 24

傳智播客學習筆記4.24 檢視中沒有資料 檢視中查詢語句儲存於資料字典中 如果通過檢視訪問資料,至少訪問系統兩次 實際工作時,需要站在使用者的角度去考慮 盡量不要對檢視進行dml操作 在檢視定義中,可以使用with read only選項來保證該檢視上不能進行dml操作 閃回技術 oracle 10...