一、問題:什麼是事務?
事務就是邏輯上的一組操作,組成這組操作的各個單元要麼全部成功,要麼全都失敗。
二、問題:事務四個特性?
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()
testpublic
void
test1()
Hibernate事務管理
問題 什麼是事務?事務就是邏輯上的一組操作,組成這組操作的各個單元要麼全部成功,要麼全都失敗。問題 事務四個特性?原子性 強調事務是不可分割最小單元 一致性 事務在執行前後,要保證資料的一致。隔離性 乙個事務在執行的過程中,不應該受到其它事務的干擾。永續性 事務一旦結束,資料持久化到資料庫。問題 不...
Hibernate的事務管理
事務就是指作為單個邏輯工作單元執行的一組資料操作,這些操作要麼全部成功,要麼全部失敗,以保證資料的一致性和完整性 事務具有以下acid屬性 a atomic 原子性 事務是由乙個或者多個行為綁在一起組成,好像是乙個單獨的工作單元。原子性確保在事務中的所有操作要麼都發生,要麼不發生。c consist...
Hibernate的事務管理
1.配置 檔案 41.業務開始之前開啟事務,業務結束之後關閉事務,業務執行過程 現異常,回滾事務。2.在hibernate中,確保使用同乙個 session物件,開發人員需要呼叫sf.getcurrentsession 方法即可獲得與 當前執行緒繫結的session物件。3.呼叫getcurrent...