问答详情
源自:5-3 交易模型管理--交易下单02

@Transactional(propagation = Propagation.REQUIRES_NEW)失效问题

同一个类中,方法调用 ,即便是加了@Transactional(propagation = Propagation.REQUIRES_NEW),也没有效果,A方法调用B方法;A方法出问题,B方法同样会回滚,老师这个有好的解决法么?

提问者:慕粉13146578634 2019-01-16 16:47

个回答

  • 像风一样zzz
    2023-02-14 18:39:33

    自事务调用失效

  • 慕圣8322165
    2019-07-02 13:19:45

    用户1148976的回答是正解,orderService要有generateOrderNo()接口,然后orderServiceImpl实现该接口,然后orderServiceImpl内部注入orderService,使用orderService.generateOrderNo()来调用,用this调用是无效的

  • 用户1148976
    2019-06-29 19:34:31

    要使得@Transactional生效,必须通过JDK动态代理或者CGLIB来调用B方法,而不能直接在A方法中调用B方法,

    这里可以在OrderServiceImpl中注入自身:

    @Autowired
    private OrderService orderService;

    在createOrder()方法中这样调用:

    orderModel.setId(orderService.generateOrderNo());

    当然,generateOrderNo()方法要改成public,OrderService接口中也要申明下generateOrderNo()方法。

  • dusty_z
    2019-01-17 12:09:11

    不管怎么样,应该不是a、b方法不能在同一类中的原因,可能是因为调用代理对象的不同导致的新的(b方法的)事务未开启,

  • dusty_z
    2019-01-16 20:59:46

    把被标注的方法前的private修饰符去掉试试