@Transactional(rollbackFor = MyCheckedException.class)
public void foo() {
throw new RuntimeException();
}
このトランザクションはロールバックされますか、それともアノテーションにRuntimeException.classを含める必要がありますか?
@Transactional(rollbackFor = MyCheckedException.class)
public void foo() {
throw new RuntimeException();
}
このトランザクションはロールバックされますか、それともアノテーションにRuntimeException.classを含める必要がありますか?
リストに含める必要はありません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");
}
出力: 挿入後: 1 ディーパック 35000 2 ヨゲシュ 35000 3 アディティア 35000 更新の例外 更新後 1 ディーパック 35000 2 ヨゲシュ 35000 3 アディティア 35000
ただし、Spring Framework のトランザクション インフラストラクチャ コードは、デフォルトでは、ランタイムの非チェック例外の場合にのみ、ロールバックのトランザクションをマークすることに注意してください。つまり、スローされた例外が RuntimeException のインスタンスまたはサブクラスである場合です。(エラーも、デフォルトでロールバックされます。) トランザクション メソッドからスローされたチェック付き例外は、トランザクションがロールバックされることにはなりません。