2012-10-11 12 views

答えて

10

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 
+0

はそれがとにかくコミット決してないだろうあなたはreadOnly = trueを持っているからですか? –

+0

@AlexBeardsley thnxは間違いを指摘してくれました。私は答えを修正しました。私はコードを再実行しました。そして、はい、実行時例外をrollbackForリストに含める必要はありません。 – deepakraut

5

しかし、春のフレームワークのトランザクション インフラコードは、デフォルトでは、唯一の のトランザクションをマークすることに注意してください - を:私はjdbcTemplateのためにそれを試してみた

実行時のロールバック、チェックされていない例外、つまり、 スローされた例外は、RuntimeExceptionのインスタンスまたはサブクラスです。 (エラーもデフォルトではロールバックされます)チェックされた トランザクションメソッドからスローされた例外は、ロールバックされるトランザクションの になりません。

Source

これは役立つかもしれない:Spring transaction management with checked and unchecked exception

0

をだから、(デフォルトでは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(); 
    } 
} 
関連する問題