Hibernate事務管理

2022-05-18 06:30:39 字數 2088 閱讀 7465

問題:什麼是事務?

事務就是邏輯上的一組操作,組成這組操作的各個單元要麼全部成功,要麼全都失敗。

問題:事務四個特性?

原子性:強調事務是不可分割最小單元

一致性:事務在執行前後,要保證資料的一致。

隔離性:乙個事務在執行的過程中,不應該受到其它事務的干擾。

永續性:事務一旦結束,資料持久化到資料庫。

問題:不考慮事務的隔離性,會產生什麼問題

?

寫問題:丟失更新

1)產生丟失更新的原因

丟失更新就是兩個不同的事務(或者開啟兩個執行緒)在某一時刻對同一資料進行讀取後,先後進行修改。導致第一次運算元據丟失。

2)解決方式

使用資料庫鎖機制防止資料丟失

(1)共享鎖

共享 (s) 鎖允許併發事務讀取 (select) 乙個資源。資源上存在共享 (s) 鎖時,任何其它事務都不能修改資料。一旦已經讀取資料,便立即釋放資源上的共享 (s) 鎖,除非將事務隔離級別設定為可重複讀或更高階別,或者在事務生存週期內用鎖定提示保留共享 (s) 鎖

(2)排它鎖

排它 (x) 鎖可以防止併發事務對資源進行訪問。其它事務不能讀取或修改排它 (x) 鎖鎖定的資料。

讀問題:髒讀、不可重複讀、虛度

髒讀:乙個事務讀取到另乙個事務的未提交資料

【注釋說明】例如在執行update操作時,這個事務未提交,資料庫的資料就沒有發生該錶;此時再執行

select

操作時,第二個事務就能讀取到更新資料之後的資料資訊;問題是資料庫的資料沒有發生改變,但

select

查詢的資料是與資料庫中的資料不一致了。

不可重複讀:

乙個事務讀取到另乙個事務提交的資料

(主要是指

update)

,會導致兩次讀取的結果不一致。

虛讀(幻讀

):乙個事務讀取到另乙個事務提交的資料

(主要是指

insert),

會導致兩次讀取結果不一致

.問題:對於上述問題如何解決

?

處理事務:效率越來越低,但安全性越來越高

我們可以通過設定隔離級別來解決讀的問題.

read_uncommited 讀取未提交:它引發所有的隔離問題

read_committed   讀已提交:  

阻止髒讀,

可能發生不可重複讀與虛讀.

repeatable_read   重複讀:

阻止髒讀,不可重複讀:可能發生虛讀

serializable          序列化:

解決所有問題

不允許兩個事務,同時操作乙個目標資料。(效率低下,但操作安全是最安全的)

oracle  預設的是事務隔離級別  

read_committed

mysql  預設的事務隔離級別    repeatable_read

hibernate.connection.isolation 

它可取的值有 1 2 4 8

1代表的事務隔離級別為  read uncommitted

2代表的事務隔離級別為  read committed

4.代表的事務隔離級別為  repeatable read

8代表的事務隔離級別為   serializable

在hibernate.cfg.xml檔案中配置

1

< property name=」hibernate.connection.isolation」>4

Hibernate事務管理

一 問題 什麼是事務?事務就是邏輯上的一組操作,組成這組操作的各個單元要麼全部成功,要麼全都失敗。二 問題 事務四個特性?1.原子性 不可分割 2.一致性 事務在執行前後,要保證資料的一致。3.隔離性 乙個事務在執行的過程中,不應該受到其它事務的干擾。4.永續性 事務一旦結束,資料持久化到資料庫。三...

Hibernate的事務管理

事務就是指作為單個邏輯工作單元執行的一組資料操作,這些操作要麼全部成功,要麼全部失敗,以保證資料的一致性和完整性 事務具有以下acid屬性 a atomic 原子性 事務是由乙個或者多個行為綁在一起組成,好像是乙個單獨的工作單元。原子性確保在事務中的所有操作要麼都發生,要麼不發生。c consist...

Hibernate的事務管理

1.配置 檔案 41.業務開始之前開啟事務,業務結束之後關閉事務,業務執行過程 現異常,回滾事務。2.在hibernate中,確保使用同乙個 session物件,開發人員需要呼叫sf.getcurrentsession 方法即可獲得與 當前執行緒繫結的session物件。3.呼叫getcurrent...