Spring对Hibernate事务管理的配置

  声明式事务配置主要分以下几步:

声明式事务配置

•配置事务管理器;
•事务的传播特性;
•那些类那些方法使用事务。
<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子类),普通异常是不会滚的。

你可能感兴趣的:(事务)