第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring Data:JPA 和嵌套事務

Spring Data:JPA 和嵌套事務

慕斯709654 2022-06-23 17:55:37
我遇到了 Spring JPA Data 和嵌套事務的問題。以下是我的服務的嵌套事務的兩種方法。@Servicepublic UserService {    @Transactional    public User createUser(UserDto userDto) {        ....        user = saveUser(user);        sendEmail(user);        ....    }    @Transactional(propagation = Propagation.REQUIRES_NEW)    public User saveUser(User user) {        return userRepository.save(user);    }碰巧有一種情況,方法 userRepository.save() 應該拋出異常,但不知何故沒有被拋出,看起來它正在等待父事務完成。我期待在 saveUser 方法和 sendEmail 方法上拋出異常,甚至不會執(zhí)行。因為該方法UserService.saveUser將傳播設置為Propagation.REQUIRES_NEW我期望提交該事務(要執(zhí)行的 SQL 語句)并且傳播任何異常。我沒有設置任何與事務相關的東西,所以我相信刷新模式設置為自動。誰能發(fā)現我做錯了什么或我的誤解是什么?
查看完整描述

1 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

這是因為您正在@Transactional從同一個 bean 中調用方法。


@Transactional僅適用于在 spring 創(chuàng)建的代理上調用的方法。這意味著,當您創(chuàng)建 @Service 或其他 bean 時,從外部調用的方法將是事務性的。如果從 bean 中調用,什么都不會發(fā)生,因為它不通過代理對象。


最簡單的解決方案是將方法移動到另一個 @Service 或 bean。如果你真的想將它保存在同一個組件中,那么你需要調用它,以便它被 spring AOP 包裝在代理中。你可以這樣做:


private YourClass self;


@Autowired

private ApplicationContext applicationContext;


@PostConstruct

public void postContruct(){

    self = applicationContext.getBean(YourClass.class);

}

然后調用方法self將導致打開事務。


換句話說:你沒有遇到任何這些異常,因為@TransactionaloversaveUser不起作用。


查看完整回答
反對 回復 2022-06-23
  • 1 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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