113

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

@Transactional(propagation=Propagation.REQUIRED)

ありがとう

4

4 に答える 4

172

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

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

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

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

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

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

于 2012-05-24T15:18:10.743 に答える
68

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

ここに画像の説明を入力

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

于 2012-05-24T15:01:15.033 に答える
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

于 2012-05-24T15:03:39.300 に答える
5

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

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

于 2012-05-24T15:07:03.750 に答える