同一个类中,方法调用 ,即便是加了@Transactional(propagation = Propagation.REQUIRES_NEW),也没有效果,A方法调用B方法;A方法出问题,B方法同样会回滚,老师这个有好的解决办法么?
自事务调用失效
用户1148976的回答是正解,orderService要有generateOrderNo()接口,然后orderServiceImpl实现该接口,然后orderServiceImpl内部注入orderService,使用orderService.generateOrderNo()来调用,用this调用是无效的
要使得@Transactional生效,必须通过JDK动态代理或者CGLIB来调用B方法,而不能直接在A方法中调用B方法,
这里可以在OrderServiceImpl中注入自身:
@Autowired private OrderService orderService;
在createOrder()方法中这样调用:
orderModel.setId(orderService.generateOrderNo());
当然,generateOrderNo()方法要改成public,OrderService接口中也要申明下generateOrderNo()方法。
不管怎么样,应该不是a、b方法不能在同一类中的原因,可能是因为调用代理对象的不同导致的新的(b方法的)事务未开启,
把被标注的方法前的private修饰符去掉试试