@Transactional(rollbackFor = MyCheckedException.class)
public void foo() {
throw new RuntimeException();
}
此事務將回滾,還是我需要在註釋中包含RuntimeException.class?是否指定@Transactional回滾還包括運行時異常
@Transactional(rollbackFor = MyCheckedException.class)
public void foo() {
throw new RuntimeException();
}
此事務將回滾,還是我需要在註釋中包含RuntimeException.class?是否指定@Transactional回滾還包括運行時異常
無需包括RuntimeException
在rollbackFor
列表。即使你沒有提及它,它也會處理。
我已經試過了出來JdbcTemplate的: -
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = MyException.class)
public void updateSalary(final int increment){
jdbcTemplate.update("update EMPLOYEE set emp_salary = emp_salary + ?", increment);
throw new RuntimeException("update exception");
}
Output: After Insertion: 1 Deepak 35000 2 Yogesh 35000 3 Aditya 35000 update exception After Update 1 Deepak 35000 2 Yogesh 35000 3 Aditya 35000
然而,請注意Spring框架的事務 基礎架構代碼將默認情況下,只有標記事務的 在運行時情況下回滾,未經檢查的異常;也就是當 拋出的異常是RuntimeException的一個實例或子類。 (錯誤也會 - 默認情況下會導致回滾)。檢查了 從事務性方法拋出的異常不會導致在回退的事務中導致 。
這可能幫助:Spring transaction management with checked and unchecked exception
因此,它可以回滾與CheckedException以及(默認的RuntimeException),例如:
@Transactional(rollbackFor = Exception.class)
public void save(Book book) throws Exception {
bookRepository.save(book);
System.out.println("Saved in transcation.");
// No data is persisted
if (true) {
throw new Exception();
}
}
不會它從未反正提交因爲你有readOnly = true? –
@AlexBeardsley thnx指出錯誤...我修改了答案..我重新運行代碼..是的,你不需要在rollbackFor列表中包含運行時異常。 – deepakraut