REQUIRED
の場合、呼び出し側メソッド自体がtransactionnalの場合、現在のメソッドは、囲みトランザクションプロパティ(rollbackForなど)が異なる場合、それらをオーバーライドしますか?Spring @Transactional Annotationプロパティの優先順位/継承
イラスト:
Class A {
@Transactional(propagation = Propagation.REQUIRED,
rollbackFor = { SomeException.class})
void foo() {
try {
b.bar();
} catch (OtherException e) {
// is the transaction marked as rollback-only at this point ?
}
}
}
Class B {
@Transactional(propagation = Propagation.REQUIRED,
rollbackFor = { OtherException.class})
void bar() {
[...]
}
}
編集:
さて、私はスコープの回答のうち些細避けるしたいと思いますので、春の繁殖取り扱いのI'amは認識して、のは明確にしましょう。
PROPAGATION_REQUIRED
が伝播設定がPROPAGATION_REQUIREDのとき:あなたがいない場合は、下記の文書の関連部分が
ですが、私はちょうど私の上記の例について最初の部分を明確にしたいと思います論理 トランザクションスコープは、設定が である各メソッドに対して作成されます。このような各論理トランザクションスコープは、外部トランザクションスコープ が内部トランザクションスコープから論理的に独立している状態で、個別にロールバックのみのステータスを決定することができます。 コースのうち、標準のPROPAGATION_REQUIRED動作の場合、これらすべてのスコープは同じ物理トランザクションにマップされます。内部トランザクションスコープに ロールバック専用マーカーが設定されていると、 のように、実際にコミットする外部トランザクションのチャンスは になります。
しかし、内側トランザクションスコープは ロールバックのみのマーカーを設定する場合には、外側のトランザクションがロールバック 自体を決定していない、など(サイレントインナー トランザクションスコープによってトリガ)ロールバックが予想外であります。対応する その時点でUnexpectedRollbackExceptionがスローされます。これは、トランザクションの呼び出し元が に誤解されることがないように、実際にはコミットが実行されなかったと想定して、 の動作が予想されます。したがって、 内部トランザクション(外側の呼び出し元が認識しないトランザクション)がサイレントに にトランザクションをロールバック専用としてマークすると、外側の呼び出し元は依然として を呼び出します。外側の呼び出し側は UnexpectedRollbackExceptionを受け取る必要があります。これは、ロールバックが だったことを明確に示すためです。
私の質問はこれと言い換えることができます。
は、論理トランザクションのスコープは、トランザクションのプロパティを保持していますか?
あなたはhttp://stackoverflow.com/questions/を参照することができます8490852/spring-transactional-isolation-propagation/32223597#32223597複数のシナリオで異なる伝播を行う場合 –