2

@Transactionalメソッド内でSQLやその他の例外をキャッチすることが安全で推奨されているかどうか、誰か教えてもらえますか?プログラムによるトランザクション管理を使用すると、例外をキャッチしてやりたいことが何でもできますが、ロールバックをトリガーするこれらの例外をキャッチしてトランザクションAOPシステムを壊さないかどうかはわかりません...宣言的な方法で行います。

AOPアドバイスの@Transactionalメソッドに個別の接続を使用して論理トランザクションを作成するプロキシがあると思います。そして、「キャッチしたい」という例外をキャッチして、トランザクションをロールバックする必要があります。

4

2 に答える 2

1

このコードを使用してのみ、プログラムでトランザクションをロールバックとしてマークできます

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

SpringReferenceの宣言型トランザクションのロールバックを参照してください。

ただし、コードをSpring Frameworkに緊密に結合しているため、お勧めしません。


おそらく、それを複数の場所で行う場合は、のようなヘルパーメソッドを導入する必要がありますTransactionUtils.rollbackCurrentTransaction()。そうすれば、トランザクションアプローチを変更する(または神が禁じる、春から離れる)ことにした場合、1つの方法を変更するだけで済みます。

于 2010-09-27T13:28:11.380 に答える
0

あなたが説明したのは、実際、Springがトランザクションのロールバックを開始するかどうかを知る方法です。例外を飲み込んだ場合、Springはトランザクションをロールバックする必要があることを知る機会がありません。

于 2010-09-26T21:16:13.623 に答える