2011-10-25 17 views
3

@Transactionalとマークされたクラスのメソッドでトランザクションを手動で維持する必要があります。これを今実行しようとすると、例外がスローされています(おそらく、トランザクションが2回、1回、2回、ラッパー・プロキシによってコミットされているためです)。私は何をする必要がありますか?@Transactionalクラス全体の1つのメソッドを非トランザクションとしてマークすることは可能ですか?

これができない場合は、トランザクションが正常にコミットされたとき(DB内のデータなど)、同じデータベースに依存する別のアプリケーションを呼び出すように通知する方法はありますか?

答えて

0

いいえ、これは可能ではありません。私は別のスレッドを作成し、コードを実行すると、それはトランザクションの外になると思う。それに注意してください。なぜなら、追加のスレッドを作成して自分自身でそれを管理しているときには、厄介なことになるからです。

1

スプリングをご利用いただき誠にありがとうございます。はいの場合は、そうすることができます。

このコードブロックをAPI hereから読んでください。伝播= Propagation.REQUIRES_NEWでマークされたメソッド内で@Transactional

@Transactional(readOnly = true) 
public class DefaultFooService implements FooService { 

public Foo getFoo(String fooName) { 
// do something 
} 

// these settings have precedence for this method 
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) 
public void updateFoo(Foo foo) { 
// do something 
} 
} 
+0

を使用したセクション 10.5.6で、私は/手動でトランザクションをコミットを開始させて頂いておりますか!私はそれを試しましたが、私はまだ同じ例外が発生します – user802232

+0

あなたの自己を開始、コミットまたはロールバックするためのコードを追加しないでください、春はあなたのためにそれを行います。上記の例では、最後の行でコミットされたupdateFoo()メソッドの開始時に、新しいトランザクションが開始されます。トランザクション間に問題がある場合はロールバックされます。 – ManuPK

関連する問題