有人说
内部调用时,被调用方法的事务声明将不起作用Spring的事务传播策略在内部方法调用时将不起作用

解决方案 »

  1.   

    楼主可以把方法B改成public 试一下 其他的我就不知道了
      

  2.   

    简单的说,是在外部接口实例访问方法事务才起作用吧,例如,userservice实现类里,有save,modify方法,在modify里面直接调用save方法,save方法是不起回滚作用,save里面的表操作是不会回滚吧,你只能在modify方法里面调用userdao的insert和update才能保证两个操作的表都能回滚,至于原理你就自己看下spring的源码实现
      

  3.   

    你的MyEntry这个类在你的Action或者哪里被调用的地方应该是注释引用的,那个Spring那时已经生成了同名的代理类,其中方法A,根据你的配置是无事务的,方法B是有事务的.然后如果你那个Action直接调用MyEntry的方法B,事务是能生效的,而调用方法A,则无事务,再根据A去调用B也一样没有事务.
      

  4.   

    所以我想咨询的是 "是不是Spring 内部调用时,被调用方法的事务声明将不起作用",为什么呢?难道一定要在A方法上加事务码,A方法处理额外的逻辑,而这些逻辑中除了调用B方法外,不需要其他事务的啊。
      

  5.   


    您的回复是“那个Spring那时已经生成了同名的代理类”我想问的是,为什么这个代理类对 通过A方法调用B方法的事务无效呢。
      

  6.   


    您的回复是“那个Spring那时已经生成了同名的代理类”我想问的是,为什么这个代理类对 通过A方法调用B方法的事务无效呢。因为生成代理类的时候,对应A方法和B方法他们的事务属性也标注进去了,如果你配置的A无事务,那么你调用A方法时就没有事务,通过A再调用B也一样没事务