业务逻辑如下:
    张三需要转500元给李四。
    请问我的业务逻辑的接口应该怎么写。就是说这个业务逻辑需要向数据库操作2条SQL语句.
    update test set money = money -500 name='zhansan'
    update test set money = money +500 name='lisi'
    这个事务是不能分开的,要么成功,要么失败。现在我把这两个操作放在一个方法里实现,还是两个方法实现。如果是一个方法,事务还好一点。如果是两个请问怎么控制这个事务。
    注:这是用STRUTS+HIBERNATE+SPRING来做的,请问SPRING事务应该怎么配置这个业务逻辑呢。谢谢。

解决方案 »

  1.   

    spring的aop是针对方法的,你的问题是事务的传播特性问题,你可以将某个方法的propagation="REQUIRED",这样如果当前有事务就用当前的,如果没有就自己开启一个,这样就保证了你的多个操作在同一事物中
      

  2.   

    三楼正解,可以用annotation的方式,比较方便一点
    比如说你有一个add方法里面有两个update
    public void add(User u) {
        update(u);
         update(u);
    } 你就可以在add方法上面加上注解@Transactional  默认的propagation好像就是REQUIRED的吧注意在beans.xml文件中加入<tx:annotation-driven transaction-manager="txManager"/>
      

  3.   

    恩,不错,三楼的正解。学习啊
    我的spring事务这一块也需要加强一下啊
      

  4.   

    在spring配置里面,让这个业务操作在同一个业务方法里面,在针对这个业务方法配置事务的属性!
      

  5.   

    写存储过程  事务交给oracle处理你项目的spring的事物应该是配好的   你直接用就可以了   问一下你同事在你项目中 咋地应用  
      

  6.   

    <!---->
    <bean id="txProxyTemplate" abstract="true"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
    <ref bean="transactionManager" />
    </property>
    <property name="transactionAttributes">
    <props>
    <prop key="trans_*">PROPAGATION_REQUIRED</prop>
    <prop key="query*">
    PROPAGATION_REQUIRED,readOnly,-Exception
    </prop>
    <prop key="find*">
    PROPAGATION_REQUIRED,readOnly,-Exception
    </prop>
    <prop key="load*">
    PROPAGATION_REQUIRED,readOnly,-Exception
    </prop>
    <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
    </props>
    </property>
    </bean>