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