@Transactional(rollbackFor = MyCheckedException.class)
public void foo() {
throw new RuntimeException();
}
このトランザクションはロールバックされるのでしょうか、それともアノテーションにRuntimeException.classも含める必要がありますか?@Transactionalロールバックを指定するとRuntimeExceptionも含まれます
@Transactional(rollbackFor = MyCheckedException.class)
public void foo() {
throw new RuntimeException();
}
このトランザクションはロールバックされるのでしょうか、それともアノテーションにRuntimeException.classも含める必要がありますか?@Transactionalロールバックを指定するとRuntimeExceptionも含まれます
をrollbackFor
に含める必要はありません。たとえあなたがそれを言及していなくてもそれは扱います。
@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
しかし、春のフレームワークのトランザクション インフラコードは、デフォルトでは、唯一の のトランザクションをマークすることに注意してください - を:私はjdbcTemplateのためにそれを試してみた
実行時のロールバック、チェックされていない例外、つまり、 スローされた例外は、RuntimeExceptionのインスタンスまたはサブクラスです。 (エラーもデフォルトではロールバックされます)チェックされた トランザクションメソッドからスローされた例外は、ロールバックされるトランザクションの になりません。
これは役立つかもしれない:Spring transaction management with checked and unchecked exception
をだから、(デフォルトではRuntimeException)だけでなくCheckedExceptionにロールバックすることができ、例:
@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