2017-02-20 3 views
0

コードの一部として、@Transactional注釈付きメソッド。いくつかのシナリオでは、このメソッドはカスタム例外をスローしてロールバックを実行します。これが起こるたびに、メソッドコールはTransactionSystemExceptionとなり、オリジナルのカスタム例外(Exeptionの根本的な原因ではない)を取得することはできません。@ TransactionalメソッドによってスローされるSpringHides RuntimeException

私の方法でスローされた元の例外に何とかしてアクセスできますか? SpringがTransactionSystemExceptionをスローするのを止めても、ロールバックすることはできますか?あなたはその方法の外に例外を管理していますが、TransactionSystemExceptionキャッチする必要があり、その後、あなたのケースでカスタム例外としてgetApplicationException()を呼び出すだろうか

@Transactional 
public Association create(Long accountId) { 
    // if association already exists, throw exception 
    throw new ErrorInfoException(ErrorInfo.duplicateAssociation(accountId).info("This Association already exists").build()); 
} 
+0

これらのカスタム例外をスローするトランザクションメソッドを追加できますか? –

+0

@MaciejKowalski私は方法の1つを編集しました。彼らはすべてかなりシンプルです – Laures

+0

どのようにTransactionSystemExceptionからルート/元の例外を取得しようとしますか? –

答えて

1

わからないはず最初のスタック上:

トランザクション例外がある場合は、その前にスローされたアプリケーション例外を返します。

何らかの理由で、その後の仕様に応じべきgetOriginalException()のために行くには、間にいくつかのより多くの例外がある場合:

リターンだった最初の例外が 失敗の中にスローするにはトランザクション:アプリケーション例外(存在する場合)、または TransactionSystemExceptionのそれ自体の原因。

例外のgetCauseメソッドを使用すると、この場合適切な方法ではない可能性があります。

+0

残念ながら、ApplicationExceptionはnullであり、OriginalExceptionはすでに原因である「javax.persistence.RollbackException」のみです。私のカスタム例外はなくなったようです。 – Laures

関連する問題