事務傳播行為:是指新增事物時的策略
1 propagation_required
如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。這是最常見的選擇。
2 propagation_supports
支援當前事務,如果當前沒有事務,就以非事務方式執行。
3 propagation_mandatory使用
當前的事務,如果當前沒有事務,就丟擲異常。
4 propagation_requires_new
新建事務,如果當前存在事務,把當前事務掛起。
5 propagation_not_supported
以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
6 propagation_never
以非事務方式執行,如果當前存在事務,則丟擲異常。
7 propagation_nested
如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行與propagation_required類似的操作。
spring事務傳播方式
主要控制當前的事務如何傳播到另外的事務中
propagation_nested
如果當前存在事務,則在巢狀事務內執行。
如果當前沒有事務,則進行與propagation_required類似的操作。
巢狀事務乙個非常重要的概念就是內層事務依賴於外層事務。
外層事務失敗時,會回滾內層事務所做的動作。而內層事務操作失敗並不會引起外層事務的回滾
propagation_never
以非事務方式執行,如果當前存在事務,則丟擲異常。
propagation_not_supported
以非事務方式執行操作,如果當前存在事務,就把當前事務掛起
propagation_required
支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇(預設)
propagation_requireds_new
新建事務,如果當前存在事務,把當前事務掛起。
propagation_supports
支援當前事務,如果當前沒有事務,就以非事務方式執行。
propagation_mandatory
支援當前事務,如果當前沒有事務,就丟擲異常。
spring事務隔離級別:
主要定義事務與事務之間在資料庫讀寫方面的控制範圍
主要解決髒讀、不可重複讀、虛讀三個問題
isolation_default 預設級別
isolation_read_uncommited
事務最低的隔離級別,充許別外乙個事務可以看到這個事務未提交的資料,
會產生髒讀,不可重複讀和幻像讀
isolation_commited
保證乙個事務修改的資料提交後才能被另外乙個事務讀取,可以避免髒讀出現,
但是可能會出現不可重複讀和幻像讀
isolation_repeatable_read
保證乙個事務不能讀取另乙個事務未提交的資料外可以防止髒讀,不可重複讀
但是可能出現幻像讀
isolation_serializable
花費最高代價但是最可靠的事務隔離級別。
事務被處理為順序執行。除了防止髒讀,不可重複讀外,還避免了幻像讀
spring中的事務管理方式:
程式設計式和宣告式(常用)
注意事項:
1. 事務邊界設定在service層
2. 需要使用sessionfactory.getcurrentsession
(hibernate3.6)不需要配置session上下文hibernate.current_session_context_class
3. spring預設通過捕獲執行時異常實現事務回滾,
非執行期異常不會觸發rollback
可以通過配置rollback-for 指定異常類
事務中不要catch異常,否則spring放棄事務管理
spring事務的傳播方式
事務傳播行為 是指新增事物時的策略 1 propagation required 如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。這是最常見的選擇。2 propagation supports 支援當前事務,如果當前沒有事務,就以非事務方式執行。3 propagation...
spring事務傳播
採用程式設計式事務 1 getcurrentsession 與opensession 的區別?採用getcurrentsession 建立的session會繫結到當前執行緒中,而採用opensession 建立的session則不會 採用getcurrentsession 建立的session在co...
Spring事務傳播
required 預設 如果當前存在事務,就加入該事務,如果不存在,則建立乙個新的事務 supports 如果呼叫者有事務,則加入該事務,如果沒有,則以非事務方式執行 mandatory 如果存在事務,則加入該事務,如果不存在事務,則拋異常 requires new 重新建立乙個新的事務,如果當前存...