2011-01-17 13 views
3

を上書きすることができます私は、次の注釈を持ってサービスを呼び出しています。 ( - >デフォルトの伝播によってmyMethodAがmainEntryPointMethodから渡された)ロールバック用にマークされます春@Transactional私はrollbackFor

@Transactional(rollbackFor=ExceptionB.class) 
public void mainEntryPointMethod(....) throws ExceptionB { 
. 
    try { 
    myMethodA() 
    } 
    catch (ExceptionA exp) { 
    . 
    } 


. 
} 

私の問題はmyMethodAが例外をスローした場合、私の取引があることです。内部メソッドの 'rollbackFor'をオーバーライドする方法はありますか?事前 で

おかげでクリス

+0

これは、基本となるトランザクションコーディネータと、ネストをどのように処理するかによって異なります。私の推測では、これはうまくいきません。 – skaffman

答えて

2

溶液#1 あなたが呼び出しているメソッドは、独自のトランザクションを取得するように指定することができます。 これは、メソッドに注釈を付けることで可能です。

@Transactional(propagation = Propagation.REQUIRES_NEW) 

このようにして、メソッド(myMethodA)にロールバックマークが付けられていれば、そのトランザクションだけがロールバックされ、呼び出し元トランザクションはロールバックされません。

これは、呼び出されたメソッドが独自のトランザクションを管理できるようにし、呼び出し元トランザクションをロールバックしたくない場合にのみ機能します。

ソリューション#2 おそらく、トランザクションの注釈属性をサブクラス化して変更することができます。

+0

あなたの答えAlfredoをありがとう。まあ、それは一つの可能​​性ですが、私はサービスメソッドを変更せずにそれをしたいと思います。私はどこか他の場所から呼び出された場合、エラーの場合にロールバックするように、デフォルトの伝播(必須)で呼び出されたメソッド(myMethodA)を残したいと思います。私は 'mainEntryPointMethod'からそれを呼び出すとき、それが異なって動作するようにしたい。 (これが可能な場合は常に)。 – Kros

関連する問題