PROPAGATION_REQUIRED事务介绍详解
采用编程式事务
1、 getCurrentSession()与openSession()的区别?
* 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession()创建的session则不会
* 采用getCurrentSession()创建的session在commit或rollback时会自动关闭,而采用openSession创建的session必须手动关闭
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
* 如果使用的是本地事务(jdbc事务)
<property name=”hibernate.current_session_context_class”>thread</property>
* 如果使用的是全局事务(jta事务)
<property name=”hibernate.current_session_context_class”>jta</property>
采用声明式事务
声明式事务配置
2、编写业务逻辑方法
* 默认的回滚是RuntimeException(包括继承RuntimeException的子类),普通异常不回滚
* 在编写业务逻辑方法时,最好将异常一直往上抛出,在呈现层处理(struts)
* spring的事务需要设置到业务方法上(事务边界定义到Facade类上),不要添加到Dao上
3、了解事务的集中传播忒性
4、Spring事务的隔离级别
事务属性
T1
T2
Required
无
T1
T2
T1
RequiredNew
无
T1
T2
T2
Support
无
T1
无
T1
Mandatory
无
T1
抛异常
T1
NoSupport
无
T1
无
无
Never
无
T1
无
抛异常
à
<!– 配置sessionFactory — >
<bean id=”sessionFacory”class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>
<property name=”configLocation”>
</property>
</bean>
<!– 配置事务管理器– >
<beanid=”transactionManager”class=”org.springframework.orm.hibernate3.HibernateTransactionMana
</property>
</bean>
<!– 配置事务的传播特性– >
<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
</tx:attributes>
</tx:advice>
<!– 哪些类的哪些方法参与事务– >
<aop:config>
</aop:config>
http://blog.sina.com.cn/s/blog_4adc4b0901011mir.html 本文链接地址: PROPAGATION_REQUIRED事务介绍详解