2017-09-22 6 views
1

私のサービスクラスにはメソッドがあります。Springの@Transactionalでアノテートされたメソッド内でスローされ捕捉されたチェックされていない例外は、依然としてトランザクションをロールバックさせますか?

@Transactional 
public void serviceMethod { 
    dao.daoMethod(); 
} 

public void daoMethod() {//dao.daoMethod 
    //some code 
    try { 
     //some more code that throws an unchecked exception 
    } catch(Exception exception) { 
     //do something -- no exceptions generated/thrown from here 
    } 
    //some more code 
} 

この結果、トランザクションがロールバックされますか? tryブロックから呼び出されたメソッド内でUnchecked例外がスローされた場合は、それは異なるでしょうか?

答えて

2

いいえ、トランザクションは、キャッチされない例外の場合にのみロールバックされます。

トランザクション型インターセプタは、注釈付きメソッドの呼び出しを「ラップ」します。彼らはの中にあるのを見ることができません。

+1

ねえのHaroldo、答えだけでなく、その背後にある説明のため 感謝。私はそれを掘り下げます。 – sarkardebanjan

1

あなたのケースでは、例外が黙って無視されます。あなたはキャッチブロックの中で何もしなかった。これはまったく勧められません。

+0

ちょっとヨハンネス。ご回答有難うございます。法的な理由から、私はここに実際のコードを置くことはできませんが、現実には私は監査と将来の行動の例外をログに記録し、そこから発生する例外はないと考えています。 – sarkardebanjan

+0

スローされた例外がチェックされていない例外の場合にのみ、トランザクションはロールバックされます。さらに、チェックされていない例外が発生したときにロールバックするために、キャッチブロック内にログメッセージの後にチェックされていない例外をスローしてください。このhttps://www.catalysts.cc/en/wissenswertes/spring-transactional-rollback-on-checked-exceptions/も参照してください。 –

1

try-catchブロックでExceptionをキャッチし、このExceptionを処理するいくつかのアクションを実行した場合、ロールバックは発生しません。 RuntimeExceptionの場合は、デフォルトでロールバックが発生します。

ロールバックを発生させる例外を指定できます。 @Transactional(rollbackFor = MyCheckedException.class)

https://resourcepool.io/2014/11/16/java-quickies-what-you-wish-you-knew-about-spring-transactional-annotation/

https://www.catalysts.cc/wissenswertes/spring-transactional-rollback-on-checked-exceptions/

+0

Hey Merkurev、 リンクありがとうございます。本当に助けに感謝します。 – sarkardebanjan

関連する問題