web-dev-qa-db-ja.com

@Transactional(propagation = Propagation.REQUIRED)

誰かがこのアノテーションが何をするのかを説明でき、正確に使用する場合:

@Transactional(propagation=Propagation.REQUIRED)

ありがとう

93
Adil

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

enter image description here

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

61
Guido

Spring Docs で提供されているものを超えて、素人向けの説明が必要な場合

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

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

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

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

トランザクション管理はかなり複雑なテーマなので、この単純化された答えが役立つことを願っています

147
Brad

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

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

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

14

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

詳細については Trasaction management をお読みください。

5
Bitmap