2017-03-07 9 views
2

私はDBのハンドリングメソッドを持っています。これは、他のメソッドを呼び出します。春にもサブメソッドの@Transactional注釈を付ける必要がありますか?

何か問題が生じた場合、すべてをロールバックしたいので、メインメソッドに@Transactionalアノテーションを挿入します。

質問:私はこの注釈をサブメソッドに対しても置くべきですか、またはサブメソッドがトランザクションメソッドから呼び出されたことを知ります。例えば

、例外が発生した消去方法では、どのように私は書き込み部分もロールバックされますことを確認することができます:それは@Transactionalでアノテート方法に遭遇したとき

@Transactional 
public void maintDbTings() { 
    writing(); 
    deleting(); 
} 

@Transactional //do I need this? 
public void writing() { 
    //no exceptions 
} 

@Transactional //do I need this? 
public void deleting() { 
    //exception occurs 
} 
+0

を、私はあなたがたと注釈が必要です。彼らが自分のトランザクションを不必要に作成していないことを確認し、可能であれば 'mainDbThings'トランザクションを使用してください。 –

+0

しかし、それらがプライベートでメインメソッドからのみ呼び出されるのであれば?削除メソッドに例外がある場合、書き込みメソッドはロールバックされますか? – victorio

+1

mainDbTingsがすでにトランザクションを開始しているので、mainDbTingsからメソッドが呼び出されている場合は、これを必要としません。しかし、これらのメソッドはプライベートでなければなりません。 mainDbTingsを使わずに呼び出すことができ、トランザクションでなければならない場合は、注釈も付ける必要があります。 –

答えて

4

春には、トランザクションを開始します。トランザクションのスコープ は、メソッドが呼び出されるまで、そのメソッドの実行、メソッドが呼び出すメソッドの実行、および などを処理します。コンフィグレーションされた PlatformTransactionManagerの対象となり、トランザクションスコープで使用する管理対象リソースは、 トランザクションに参加します。たとえば、org.springframework.jdbc.datasource.DataSourceTransactionManagerを使用すると、リンクDataSource から取得したConnectionがトランザクションに自動的に参加します。 トランザクションは、次の2つの方法のいずれかで終了します。メソッドが直接実行を完了し、トランザクションマネージャがトランザクションをコミットするか、メソッドが例外をスローし、トランザクションマネージャがトランザクションをロールバックします。

今はっきりしていることを願っています。

平易な英語で
3

、あなたはこの持っている:

@Transactional 
public void maintDbTings() { 
    writing(); 
} 


@Transactional //do I need this? 
public void writing() { 
    //no exceptions 
} 

をそしてmainDbTingsを呼び出し、writing@Transactionalは効果がありません。 mainDbThingsのために開始されたトランザクションは依然として書面で表示されていることを意味します。この場合、簡単に削除できます。 が公開されている一方

writingので、それはおそらく、サービスクラスであるため、誰かが、それがトランザクションであることをを期待して を呼ぶかもしれません。この場合、writing@Transactionalにすることは必須であり、削除することはできません。

あなたのニーズは本当にアップしています。

+0

また、 'propagation'プロパティを使ってネストされた呼び出しのトランザクションを変更することもできます。 http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html –

関連する問題