以前看过银行转帐的那个例子,最近第一次用事务,有些地方不太明白,请教大家了我这样设置的,也就是把事务加到所有的DaoImp中,<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean name="tansactionIntercepter"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref local="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*DaoImp</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>tansactionIntercepter</value>
</list>
</property>
</bean>我有一个疑问,如果把这个DaoImp注入到Service然后把Service注入到Action中,Action中用一个方法更新原来帐号中的余额记录(转出钱),然后同样的用另一个方法更新另一个帐号中的余额(转入钱).因为事务是加到DaoImp中的,每次Service调用方法都相当于是调用DaoImp中的方法,如果该方法的执行出现问题,事务就起作用.但是Action里用的是两个方法,如果转出钱的方法正常,转入钱的方法失败,也只会回滚转入钱的方法啊.这样钱就消失了.
请问是我的理解上有问题还是实现思路上有问题?

解决方案 »

  1.   

    你可以把事务处理配置在service,然后action调用service的方法,你把转账这个方法写在service中(就是把减少钱和增加钱放在service中)。这样你在action调用的是service方法,而事务是放在service层的,这样转账的时候减少钱的时候发生错误就会回滚。另外:配置到service层,就是在: <list>
                    <value>*DaoImp</value>
                </list>
    中加上<value>*Service</value>