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...