也许是个很简单的问题,请教一下大家。
Spring使用的是声明式事务管理。
在程序中A方法调用了B方法;B方法调用了C方法。
A和C方法都是PROPAGATION_REQUIRED方式事务管理
B方法没有事务管理的
请问C方法是和A方法进行了事务合并,还是新创建了事务

解决方案 »

  1.   

    如果A方法开启了事务,并且在调用B方法,C方法
    属于同一个事务,B方法和C方法中出现异常仍然会回滚
    楼主可以自己试一下
      

  2.   

    依我之见,要看你的事务在那个方法里开启的,两个方法也可以都开启事务,那样事务就进行了嵌套!你也可以形象的理解为嵌套的if和else
      

  3.   

    Spring使用的是声明式事务管理。
    是统一配置与管理的吧。你应该是一个业务调用一个业务方法,当然务业方法里可能会调多个DAO,这是一个事务,如果你不是这种形式,那你要改一改代码。
      

  4.   

    A和C方法都是PROPAGATION_REQUIRED方式事务管理
    B没有事务管理
    调用A时开启事务
    调用B时依然使用 A的事务
    调用C时也是依然使用 A的事务PROPAGATION_REQUIRED方式 有事务使用当前事务,没有事务开启新的事务
      

  5.   

    楼上说的很对!  如果你A,B,C里面都有事务的话,是会使用当前事务的!
      

  6.   

    事务传播特性有一个是下一个方法不使用上一个方法的事务的
    好像是PROPAGATION_REQUIRED_NEW
    有点忘记了
      

  7.   

    在实际开发中,service层方法互相调的情况,很正常呀。
    而且也不是声明式事务就不能service层的方法互相调吧
      

  8.   

    PROPAGATION_REQUIRED方式 有事务使用当前事务,没有事务开启新的事务
    PROPAGATION_NESTED方式才是事务嵌套
      

  9.   

    PROPAGATION这个词就是action中传播的意思,有几种方式,你google下看看自己需要那种酒申明哪种就可以啦,学会分析思考,独立解决问题能力
      

  10.   

    这个是一系列知识点了。你可以看看spring事物传播这块。
    单纯就你这个问题而言
    c是使用的a的事物。也就是他们共享一个事物,如果c是REQUIRES_NEW 那么c将新启动一个事物,并将a的事物挂起。