採用程式設計式事務
1、 getcurrentsession()與opensession()的區別?
* 採用getcurrentsession()建立的session會繫結到當前執行緒中,而採用opensession()建立的session則不會
* 採用getcurrentsession()建立的session在commit或rollback時會自動關閉,而採用opensession建立的session必須手動關閉
2、使用getcurrentsession()需要在hibernate.cfg.xml檔案中加入如下配置:
* 如果使用的是本地事務(jdbc事務)
ex t_class」>thread
* 如果使用的是全域性事務(jta事務)
jta採用宣告式事務
宣告式事務配置
* 配置sessionfactory
* 配置事務管理器
* 事務的傳播特性
* 那些類哪些方法使用事務
2、編寫業務邏輯方法
* 繼承hibernatedaosupport類,使用hibernatetemplate類持久化,hibernatetemplate
是hibernate session的封裝
* 預設的回滾是runtime exception(包括繼承runtimeexception的子類),普通異常不回滾
* 在編寫業務邏輯方法時,最好將異常一直往上丟擲,在呈現層處理(str uts)
* spring的事務需要設定到業務方法上(事務邊界定義到facade類上),不要新增到dao上
3、了解事務的集中傳播忒性
1、propagation_required:如果存在乙個事務,則支援當前事務。如果沒有事務則開啟。
2、propagation_supports:如果存在乙個事務,支援當前事務。如果沒有事務,則非事務的執行。
3、propagation_mandatory:如果已經存在乙個事務,支援當前事務。如果沒有乙個活動的事務,則丟擲異常。
4、propagation_requires_new:總是開啟乙個新的事務。如果乙個事務存在,則將這個存在的事務掛起。
5、propagation_not_supported:總是非事務地執行,並掛起任何存在的事務。
6、propagation_never:總是非事務地執行,如果存在乙個活動事務,則丟擲異常。
7、 propagation_nested:如果乙個活動的事務存在,則執行在乙個巢狀的事務中,如果沒有活動事務,則按transactiondefinition.propagation_required屬性執行
4、spring事務的隔離級別
1、 isolation_default: 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別。
2、isolation_read_uncommitted:這是事務最低的隔離級別,它允許另外乙個事務可以看到這個事務未提交的資料。
3、isolation_read_committed:保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事務未提交的資料。
4、isolation_repeatalbe_read: 這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻想讀。它除了保證乙個事務不能讀取另外乙個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)。
5、isolation_serializable 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。除了防止髒讀,不課重複讀外,還避免了幻想讀。
事務屬性
t1t2
required無t1
t2t1
requirednew無t1
t2t2
support無t1
無t1mandatory無t1
拋異常t1
nosupport無t1
無無never無t1
無拋異常
àid =」sessionfacory」class=」org.springframework.orm .hibernate3.localsessionfactorybean」>
cat ion」>
classpath:hibernate.cfg.xml
dd *」 propagation=」required」/>
//唯讀提高了效能
cut id=」allmanagermethod」 expr ession=」execution(* com.bjsxt.usermgr.manager.*.*(..))」/>
使用為@transactional(propagation=propagation.required,rollbackfor = exception.class)
Spring事務傳播
required 預設 如果當前存在事務,就加入該事務,如果不存在,則建立乙個新的事務 supports 如果呼叫者有事務,則加入該事務,如果沒有,則以非事務方式執行 mandatory 如果存在事務,則加入該事務,如果不存在事務,則拋異常 requires new 重新建立乙個新的事務,如果當前存...
Spring事務傳播
package org.springframework.transaction import org.springframework.lang.nullable public inte ce transactiondefinition 事務的傳播面向的是乙個方法在另乙個方法中執行時對事務的處理方式。...
spring事務以及事務傳播
事務必須服從acid原則。acid指的是原子性 atomicity 一致性 consistency 隔離性 isolation spring的事務管理的幾種實現方式 1.程式設計式 首先基於pojo的話一般就是用這種,在 中呼叫begintransaction commit rollback 等事務...