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

来源:5-3 交易模型管理--交易下单02

慕粉13146578634

2019-01-16 16:47

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

写回答 关注

5回答

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

    自事务调用失效

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

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

    慕粉1471... 回复少年啊c

    可能是

    2020-04-10 11:30:05

    共 2 条回复 >

  • 用户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修饰符去掉试试

    dusty_... 回复慕粉1314...

    你看看你的类上是不是加了@Transactional,如果是的话,去掉。应该是在a方法上添加@Transactional,b方法上添加@Transactional(propagation = Propagation.REQUIRES_NEW)

    2019-01-17 12:01:28

    共 2 条回复 >

SpringBoot构建电商基础秒杀项目

应用SpringBoot快速搭建拥有用户、商品、交易及秒杀活动的电商秒杀应用。

49065 学习 · 954 问题

查看课程

相似问题