2016-09-09 7 views
1
@Transactional(propagation = Propagation.NOT_SUPPORTED) 
public void a(){ 
    a(); 
    b(); 
} 
@Transactional(propagation = Propagation.REQUIRED) 
public void b(){ 
    //do something 
} 
@Transactional(propagation = Propagation.REQUIRED) 
public void c(){ 
    //do something 
} 

メソッドb()とメソッドc()は同じトランザクションを使用していますか?ありがとう。spring @()コールb()とc()のトランザクション伝播

+1

この@stackoverflow.com/questions/1099025/spring-transactional-what-happens-in-backgroundを読んで、 '@Transactional'がどのように動作し、この特定のケースでどうなるか把握することをお勧めします。 – chimmi

答えて

1

私はあなたのコードは次のように再帰呼び出しを防ぐために修正されるべきだと思う:

@Transactional(propagation = Propagation.NOT_SUPPORTED) 
public void a(){ 
    c(); 
    b(); 
} 

このケースc()とb(IN)がトランザクションで実行されることはありません、@Transactionalのアノテーションにのみ有効です同じクラス内ではなく、クラス外からメソッドが呼び出された場合。

+0

私はあなたが言っていることを理解していますが、私は '外のクラスから呼ばれた'と思うのは間違っています。手動でインスタンスを作成し、その上で 'a()'を呼び出すと、この基準を満たしますが、明白な理由のためにはうまくいかないでしょう。 – chimmi