Hibernate事務管理

2021-09-12 00:23:24 字數 2135 閱讀 3656

一、問題:什麼是事務?

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

二、問題:事務四個特性?

1.原子性:不可分割

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

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

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

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

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

2.不可重複讀:乙個事務讀取到另乙個事務提交的資料(主要是指update),會導致兩次讀取的結果不一致。

3.虛讀(幻讀):乙個事務讀取到另乙個事務提交的資料(主要是指insert),會導致兩次讀取結果不一致.

四、問題:對於上述問題如何解決?

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

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

2.read_committed讀已提交,阻止髒讀,可能發生不可重複讀與虛讀.

3.repeatable_read重複讀阻止髒讀,不可重複讀 可能發生虛讀

4.serializable 序列化解決所有問題 不允許兩個事務,同時操作乙個目標資料。(效率低下)

oracle 預設的是事務隔離級別 read_committed

mysql 預設的事務隔離級別 repeatable_read

hibernate中設定事務隔離級別:

name

="hibernate.connection.isolation "

>

4property

>

它可取的值有 1 2 4 8

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

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

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

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

hibernate提供了三種管理session的方式:

1.session物件的生命週期與本地執行緒繫結(threadlocal)

2.session物件的生命週期與jta事務繫結(分布式事務管理)

3.hibernate委託程式來管理session的生命週期

關於本地執行緒繫結session。

步驟:1.需要在hibernate.cfg.xml檔案配置:

name

="hibernate.current_session_context_class"

>

threadproperty

>

2.在獲取session時不要在使用opensession而是使用getcurrentsession()方法。

(使用getcurrentsession獲取的與執行緒繫結的session物件,在事務關閉時,session物件也會close,簡單說,就不需要我們在手動session.close();)

public

static session getcurrentsession()

test
public

void

test1()

Hibernate事務管理

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

Hibernate的事務管理

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

Hibernate的事務管理

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