0

特定のトランザクション属性を持つトランザクション メソッドが、異なるトランザクション属性を持つ同じ Bean でメソッドを呼び出すとどうなりますか?

4

2 に答える 2

1

Springの標準的なトランザクション構成では、nothinが発生します。ドキュメントから(宣言型トランザクション管理の完全な説明については、リファレンスドキュメントを参照してください):

プロキシモード(デフォルト)では、プロキシを介して着信する外部メソッド呼び出しのみがインターセプトされます。つまり、自己呼び出しは、実際には、ターゲットオブジェクト内のメソッドがターゲットオブジェクトの別のメソッドを呼び出しても、呼び出されたメソッドが@Transactionalでマークされている場合でも、実行時に実際のトランザクションにつながることはありません。

同じBeanでメソッド呼び出しを使用してトランザクションの動作(伝播、読み取り専用ステータスなど)を変更する必要がある場合は、トランザクションモードをAspectJに変更し、コンパイル時のワイビングを使用できます(これを行う方法はこちらをご覧ください)。しかし、テストのためだけに、実際にこれを行ったことはありません。通常、これで十分なデフォルトのトランザクション設定です。

于 2012-08-16T06:47:24.257 に答える
0

@TransactionalのreadOnly属性には、以下の例外があります。

@Transactional(readOnly=true)
void methodA(){}

@Transactional
void methodB(){}

このようなメソッドを呼び出し、Hibernateまたは他のORMプラットフォームを使用する場合:

methodA();
methodB();

読み取り専用接続例外をスローします。

于 2012-08-16T06:48:28.917 に答える