這是控制器代碼:
@GetMapping("/test/hello")
public String test() {
Member m = memberService.transactionTest();
return "haha";
}
這是服務代碼:
@Transactional(rollbackFor = NullPointerException.class)
public Member transactionTest() {
Member m = Member.builder()
.username("rollback")
.age(32)
.team(teamRepository.findById(1L).get())
.coach(coachRepository.findById(1L).get())
.build();
memberRepository.save(m);
exception();
return m;
}
public void exception(){
Member m = null;
m.getUsername();
}
據我所知,它在完成時應該回滾,因為發生 RuntimeException 但插入程序運行良好,所以我想知道為什么。
uj5u.com熱心網友回復:
因為Optional.get()拋出NoSuchElementException(而不是空指標)。
從 javadoc:
public T get()
如果 this 中存在一個值
Optional,則回傳該值,否則拋出NoSuchElementException....
通過rollbackFor = NullPointerException.class您NoSuchElementException從可回滾的例外中排除。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360120.html
