日期:2014-05-17  浏览次数:20881 次

spring
在使用spring事务的中,遇到个问题比较晕,在applicationContext.xml中,配置的
<!--配置事务的传播特性 -->
    <tx:advice id="txAdvice" transaction-manager="hibernateTransactionManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="*" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    
    <!--那些类的哪些方法参与事务 -->
    <aop:config>
        <aop:pointcut id="allManagerMethod" expression="execution(* com.dao.impl.*.*(..))"/>
        <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
    </aop:config>
则事务将在指定的execution(* com.dao.impl.*.*(..))产生事务,然后我在service层中要对多个表进行操作,同时还要添加事务吗?这一点让我有点晕,是不是我还要在spring配置文件中添加 
<!-- 启用注解事务管理 -->
<tx:annotation-driven transaction-manager="hibernateTransactionManager"/>
然后在service层中添加 @Transactionl 进行标注,我不知道我说的对不对,总之我现在不明白的地方就是对于多个表要在一个事务中的时候,需要怎样配置,谢谢解答的朋友

------解决方案--------------------
<tx:annotation-driven transaction-manager="hibernateTransactionManager"/>加上这个就行了,剩下的工作spring帮你做了
------解决方案--------------------
spring的事务管理两种方式,一种采用AOP式的XML配置,一种是基于注解的方式
这两种方式达到的效果是一样的,如果想要同时操作多个表,并且保持一致性,只需要写在一个方法中就可以了
比如同时操作表A,表B,
@Transactional(readOnly=false)
public void operateAAndB() {
//todo A
//TODO B
//上述两种操作任何一个有异常均会涉及事务的回滚操作
}
如果要分开操作,那么分开两个方法即可。
主要要意识到事务的传播性,内部事务还外部事务是如何设置的。
------解决方案--------------------
<!-- 使用基于注解方式配置 -->
<tx:annotation-driven transaction-manager="hibernateTransactionManager"/>

这是<!-- 那些类的哪些方法参与事务 -->
<aop:config>
        <aop:pointcut id="allManagerMethod" expression="execution(* com.dao.impl.*.*(..))"/>
        <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
    </aop:config>

如果不想用注解,配置上面的也行
------解决方案--------------------
。。。。我明白你的意思了,,这两者不是同一个概念,本质上不是一回事,需要两个都配置,,
<tx:annotation-driven transaction-manager="hibernateTransactionManager"/>
这个是用来开启事务注解配置方式的,
 <aop:config>
         <aop:pointcut id="allManagerMethod" expression="execution(* com.dao.impl.*.*(..))"/>
         <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
这个是用来配置当执行dao的时候分别执行前置通知、环绕通知、后置通知、例外通知,最终通知这些方法的。。。。跟上面那个配置项没有关系。。