この注釈が何をするのか、正確にいつ使用するのかを誰かが説明できる場合:
@Transactional(propagation=Propagation.REQUIRED)
ありがとう
この注釈が何をするのか、正確にいつ使用するのかを誰かが説明できる場合:
@Transactional(propagation=Propagation.REQUIRED)
ありがとう
Spring Docsで提供されているものを超えた使用の素人の説明が必要な場合
このコードを検討してください...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
doSomething() が呼び出されると、実行する前にデータベースでトランザクションを開始する必要があることがわかります。このメソッドの呼び出し元がすでにトランザクションを開始している場合、このメソッドは現在のデータベース接続で同じ物理トランザクションを使用します。
この注釈は、実行時にコードにトランザクションが必要@Transactional
であることを伝える手段を提供します。それなしでは実行されないため、データベースに不完全なデータが残ることはなく、例外が発生した場合に何かをクリーンアップする必要があるという前提をコードで作成できます。
トランザクション管理はかなり複雑なテーマなので、この簡単な回答が役立つことを願っています
伝播設定が PROPAGATION_REQUIRED の場合、設定が適用されるメソッドごとに論理トランザクション スコープが作成されます。このような各論理トランザクション スコープは、ロールバックのみのステータスを個別に決定でき、外側のトランザクション スコープは内側のトランザクション スコープから論理的に独立しています。もちろん、標準の PROPAGATION_REQUIRED 動作の場合、これらのスコープはすべて同じ物理トランザクションにマップされます。そのため、内側のトランザクション スコープに設定されたロールバックのみのマーカーは、外側のトランザクションが実際にコミットされる可能性に影響を与えます (予想どおり)。
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
Springアプリケーションでは、@ Transactional (propagation = Propagation.REQUIRED)<tx:annotation-driven/>
を使用してクラス/メソッドを使用してアノテーションベースのトランザクションサポートを有効にすると、Springフレームワークはトランザクションを開始し、メソッドを実行してトランザクションをコミットします。RuntimeExceptionが発生した場合、トランザクションはロールバックされます。
実際にはpropagation=Propagation.REQUIREDはデフォルトの伝播レベルであり、明示的に言及する必要はありません。
REQUIRED
など、トランザクション管理に採用されているさまざまなトランザクション設定と動作ISOLATION
を理解するには、トランザクション管理自体の基本を理解する必要があります。
説明の詳細については、トランザクション管理を参照してください。