Spring对Hibernate事务管理的配置
程序员文章站
2022-03-05 09:53:47
...
声明式事务配置主要分以下几步:
声明式事务配置
•配置事务管理器;
•事务的传播特性;
•那些类那些方法使用事务。
这时候我们就可以在我们业务逻辑层用HibernateTemplate里面提供的数据操作方法来编写我们的业务逻辑方法了,当然我们的方法必须要是以我们事务配置里面配置的一样,用save,delete,update,get,register*,modify*,*lock*等等。做我们的方法的开头。需要注意的是,默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的。
声明式事务配置
•配置事务管理器;
•事务的传播特性;
•那些类那些方法使用事务。
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="register*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="*lock*" propagation="REQUIRED" />
<tx:method name="reset*" propagation="REQUIRED" />
<!-- 将save、delete、modify开头的事务之外的事务全部设置 为只读事务,这样也可以在一定程序上提高系统性能 -->
<tx:method name="find*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 配置那些类的那些方法参与事务 -->
<aop:config>
<!-- <aop:pointcut>标签指的是一个范围 -->
<aop:pointcut id="allMagangerMethod" expression="execution(* com.chinaGPS.song.dao.base.BaseService.*(..))" />
<aop:pointcut id="allMagangerMethod1" expression="execution(* com.chinaGPS.song.service.impl.*ServiceImpl.*(..))" />
<aop:pointcut id="allMagangerMethod2" expression="execution(* com.chinaGPS.song.service.*Service.*(..))" />
<!-- <aop:advisor>标签相当于Aspect -->
<aop:advisor pointcut-ref="allMagangerMethod" advice-ref="txAdvice" />
<aop:advisor pointcut-ref="allMagangerMethod1" advice-ref="txAdvice" />
<aop:advisor pointcut-ref="allMagangerMethod2" advice-ref="txAdvice" />
</aop:config>
这时候我们就可以在我们业务逻辑层用HibernateTemplate里面提供的数据操作方法来编写我们的业务逻辑方法了,当然我们的方法必须要是以我们事务配置里面配置的一样,用save,delete,update,get,register*,modify*,*lock*等等。做我们的方法的开头。需要注意的是,默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的。
上一篇: 操作系统进程管理--读者写者问题
下一篇: python怎么安装turtle