25
@Transactional(rollbackFor = MyCheckedException.class)
public void foo() {
    throw new RuntimeException();    
}

このトランザクションはロールバックされますか、それともアノテーションにRuntimeException.classを含める必要がありますか?

4

3 に答える 3

25

リストに含める必要はありませんRuntimeExceptionrollbackForあなたがそれについて言及しなくても、それはそれを処理します。

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
于 2012-10-11T04:59:29.590 に答える
9

ただし、Spring Framework のトランザクション インフラストラクチャ コードは、デフォルトでは、ランタイムの非チェック例外の場合にのみ、ロールバックのトランザクションをマークすることに注意してください。つまり、スローされた例外が RuntimeException のインスタンスまたはサブクラスである場合です。(エラーも、デフォルトでロールバックされます。) トランザクション メソッドからスローされたチェック付き例外は、トランザクションがロールバックされることにはなりません。

ソース

于 2012-10-11T05:45:11.277 に答える