Spring对Hibernate的事务支持
spring提供了对hibernate等pojo对象的事务管理的支持。这是一个spring的一个意义重大的特性。
spring提供两种方式对hibernate提供事务管理方式,分别为编程式事务管理和声明式事务管理。
spring事务策略,也就是spring事务管理的实现方式.它有一个统一的抽象是由实现下面这个接口完成的.org.springframework.transaction.PlatformTransactionManager.像我们常见到的HibernateTransactionManager也是实现的这个接口。
不管是声明式的还是编程式的事务管理都需要此抽象来完成.
一、编程式事务
编程式事务常用getCurrentSession和openSession来完成。
代码片段
<!-- 配置SessionFactory --> <bean id="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property></bean> <!-- 说明哪些方法使用事务 --><aop:config> <aop:pointcut id="allManagerMethod"expression="execution(* com.wh.usermgr.manager.*.*(..))"/> <aop:advisor pointcut-ref="allManagerMethod"advice-ref="txAdvice"/> </aop:config><!--事务的传播特性配置 --><tx:advice id="txAdvice"transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*"propagation="REQUIRED"/> <tx:method name="del*"propagation="REQUIRED"/> <tx:method name="modify*"propagation="REQUIRED"/> <tx:method name="*"propagation="REQUIRED" read-only="true"/> </tx:attributes></tx:advice>
大多数Spring用户选择声明式事务管理,这是最少影响应用代码的选择,因而这是和非侵入性的轻量级容器的观念是一致的。
最后,总结一下Spring事务的优点:
为不同的事务API提供一致的编程模型,如JTA、JDBC、Hibernate、iBATIS数据库层JDO
提供比大多数事务API更简单的、易于使用的编程式事务管理API
整合Spring数据访问抽象
支持Spring声明式事务管理