对spring事务管理的一点疑问,请大家指点

来源:百度知道 编辑:UC知道 时间:2024/05/22 05:03:29
我使用的是BeanNameAutoProxyCreator来管理事务,为什么配置不起作用呢?就是说还跟以前一样,发生异常的时候没有回滚,配置文件关键部分如下:

....(开头就是数据源什么的配置,为了节省空间就没有写了,配置文件本身没有问题,就是事务不起作用)

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="tansactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PRORAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>

配置没有问题,关键你的事务的那部分JAVA代码,看看你的2次操作是否在一个事务内.

你的2次操作要在一个事务里面,也就是说在你的save方法内部有2次数据库操作,然后对save方法进行声明式事务拦截

最好对service方法进行事务声明,不要直接对DAO内部方法声明,这样就不存在原子性概念了。因为你session.save方法之后当前事务已经结束了,再session.save是一个新的事务

说白了,Spring的声明式事务不是说你声明的方法都加入同一个事务,而是每一个方法一个事务,原子性操作方法在该方法内部调用。