@Transactional(propagation = Propagation.REQUIRED)


107

誰かがこの注釈が何をするのか、そして正確にいつそれを使用するのかを説明できる場合:

@Transactional(propagation=Propagation.REQUIRED)

ありがとう



3
Propagation.REQUIREDはTransactionのデフォルトの伝播モードなので、明示的に設定する必要はありません。
tibtof

回答:


65

伝播設定がPROPAGATION_REQUIREDの場合、設定が適用されるメソッドごとに論理トランザクションスコープが作成されます。このような各論理トランザクションスコープは、ロールバックのみのステータスを個別に決定でき、外部トランザクションスコープは内部トランザクションスコープから論理的に独立しています。もちろん、標準のPROPAGATION_REQUIRED動作の場合、これらのスコープはすべて同じ物理トランザクションにマップされます。したがって、内側のトランザクションスコープに設定されたロールバックのみのマーカーは、外側のトランザクションが実際にコミットする可能性に影響します(予想どおり)。

ここに画像の説明を入力してください

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html


166

Spring Docsで提供されている以外の使い方についての素人の説明が必要な場合

このコードを検討してください...

class Service {
    @Transactional(propagation=Propagation.REQUIRED)
    public void doSomething() {
        // access a database using a DAO
    }
}

doSomething()が呼び出されると、実行する前にデータベースでトランザクションを開始する必要があることがわかります。このメソッドの呼び出し元がすでにトランザクションを開始している場合、このメソッドは現在のデータベース接続で同じ物理トランザクションを使用します。

この@Transactional注釈は、コードが実行されるときに、トランザクションが必要であることをコードに伝える手段を提供します。これがないと実行できません。そのため、データベースで不完全なデータを残さない、または例外が発生した場合に何かをクリーンアップする必要がないことをコードで想定できます。

トランザクション管理はかなり複雑なテーマなので、うまくいけば、この簡単な答えが役に立ちます



プロキシベースの構成を使用して宣言し、DAOレイヤーにアクセスする場合は、DAOクラスへのメソッドにも@Transactionalアノテーションを付ける必要があります。
クラピカ2017年

あなたが追加した場合@Transactional、あなたのサービス層に、さらに追加するさらなる要件はありません@Transactional、そのトランザクション内で呼び出されているDAOメソッドには。
ブラッド

doSomething()@transactionalなしで別のネストされたメソッドを呼び出す場合、この同じトランザクションはその呼び出しメソッドにも適用されますか?
thisarattr 2018

はい、ネストされたメソッドの実行に同じスレッドが使用されている限り(つまり、新しいスレッドを明示的に作成しない限り)。これは、SpringトランザクションがThreadLocal変数を使用して現在のスレッドにバインドされているためです
Brad

15

Springアプリケーションで、@ Transactional (propagation = Propagation.REQUIRED)を使用<tx:annotation-driven/>してクラス/メソッドを使用して注釈を付けると、注釈ベースのトランザクションサポートが有効になります。、Springフレームワークがトランザクションを開始し、メソッドを実行してトランザクションをコミットします。RuntimeExceptionが発生した場合、トランザクションはロールバックされます。

実際、propagation = Propagation.REQUIREDはデフォルトの伝搬レベルであり、明示的に言及する必要はありません。

詳細情報:http : //static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations


5

など、トランザクション管理に採用されているさまざまなトランザクション設定と動作を理解するにはREQUIREDISOLATIONなどあなたは、トランザクション管理自体の基本を理解する必要があります。

説明について詳しくは、トランザクション管理をご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.