2017-04-26 11 views
0

私は次の2つのクラスがあるとします。`org.springframework.transaction.annotation.Transactional`の振る舞い

class A { 
    private B b; 

    @Transactional 
    public void a(){ 
    b.b(); 
    //do a stuff 
    throw new RuntimeException("oops"); 
    } 
} 

class B { 
    @Transactional 
    public void b(){ 
    //do b stuff 
    } 
} 

この場合、方法b()(またはb stuff)もロールバックされますか?

+0

トランザクションで発生するすべてがロールバックされます – XtremeBaumer

+1

トランザクションの定義方法によって異なります – Jens

+0

@Jens何を意味していますか? '@Transactional'の他の属性は全てデフォルトです。 –

答えて

3

場合によってはロールバックされます。

あなたB b;は春でautowired(お使いの場合には、それはないと思われる)とb()法上の@Transactionalは、伝播REQUIRES_NEW(現在はそれがデフォルトに - が必要)があるされている場合は、既存のトランザクションを使用しますが、これだけ新しいを開始しないことを意味しますこの場合、b()のコミットはロールバックされません。