亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

@Transactional(propagation = Propagation.REQUIRES_NEW)失效問題

同一個類中,方法調用 ,即便是加了@Transactional(propagation = Propagation.REQUIRES_NEW),也沒有效果,A方法調用B方法;A方法出問題,B方法同樣會回滾,老師這個有好的解決法么?

正在回答

5 回答

自事務調用失效

0 回復 有任何疑惑可以回復我~

用戶1148976的回答是正解,orderService要有generateOrderNo()接口,然后orderServiceImpl實現該接口,然后orderServiceImpl內部注入orderService,使用orderService.generateOrderNo()來調用,用this調用是無效的

2 回復 有任何疑惑可以回復我~
#1

少年啊c

老師這個是錯的?
2019-08-03 回復 有任何疑惑可以回復我~
#2

慕粉1471311418 回復 少年啊c

可能是
2020-04-10 回復 有任何疑惑可以回復我~

要使得@Transactional生效,必須通過JDK動態代理或者CGLIB來調用B方法,而不能直接在A方法中調用B方法,

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

@Autowired
private?OrderService?orderService;

在createOrder()方法中這樣調用:

orderModel.setId(orderService.generateOrderNo());

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

5 回復 有任何疑惑可以回復我~

不管怎么樣,應該不是a、b方法不能在同一類中的原因,可能是因為調用代理對象的不同導致的新的(b方法的)事務未開啟,

0 回復 有任何疑惑可以回復我~

把被標注的方法前的private修飾符去掉試試

0 回復 有任何疑惑可以回復我~
#1

慕粉13146578634 提問者

我試了,也不行呢,我把B方法單獨寫到另一個類里面,通過注入B方法所在的類,然后在A方法中調用B方法,就可以了。也就是說,要使@Transactional(propagation = Propagation.REQUIRES_NEW)有效,A和B方法,最好不要在同一個類中?
2019-01-17 回復 有任何疑惑可以回復我~
#2

dusty_z 回復 慕粉13146578634 提問者

你看看你的類上是不是加了@Transactional,如果是的話,去掉。應該是在a方法上添加@Transactional,b方法上添加@Transactional(propagation = Propagation.REQUIRES_NEW)
2019-01-17 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

@Transactional(propagation = Propagation.REQUIRES_NEW)失效問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號