インターフェース TransactionDefinition
- すべての既知のサブインターフェース:
- ResourceTransactionDefinition,- TransactionAttribute
- すべての既知の実装クラス:
- DefaultTransactionAttribute、- DefaultTransactionDefinition、- DelegatingTransactionAttribute、- DelegatingTransactionDefinition、- RuleBasedTransactionAttribute、- TransactionTemplate
 実際の新しいトランザクションが開始されない限り、分離レベルとタイムアウトの設定は適用されないことに注意してください。PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW、PROPAGATION_NESTED のみがこれを引き起こす可能性があるため、通常、他の場合にこれらの設定を指定しても意味がありません。さらに、すべてのトランザクションマネージャーがこれらの高度な機能をサポートしているわけではないため、デフォルト以外の値を指定すると、対応する例外がスローされる可能性があることに注意してください。
 読み取り専用フラグは、実際のリソーストランザクションによってサポートされているか、リソースレベルで非トランザクション的に動作しているかにかかわらず、すべてのトランザクションコンテキストに適用されます。後者の場合、フラグは Hibernate Session などのアプリケーション内の管理対象リソースにのみ適用されます。
- 導入:
- 08.05.2003
- 作成者:
- Juergen Hoeller
- 関連事項:
- フィールドのサマリーフィールド修飾子と型フィールド説明- static final int基礎となるデータストアのデフォルトの分離レベルを使用します。- static final intダーティリードが防止されることを示します。繰り返し不可の読み取りとファントム読み取りが発生する可能性があります。- static final intダーティリード、繰り返し不可能なリード、ファントムリードが発生する可能性があることを示します。- static final intダーティリードおよび繰り返し不可のリードが防止されることを示します。ファントムリードが発生する可能性があります。- static final intダーティリード、繰り返し不可能なリード、ファントムリードが防止されることを示します。- static final int現在のトランザクションをサポートします。現在のトランザクションが存在しない場合、例外をスローします。- static final int現在のトランザクションが存在する場合はネストされたトランザクション内で実行し、それ以外の場合は- PROPAGATION_REQUIREDのように動作します。- static final int現在のトランザクションをサポートしません。現在のトランザクションが存在する場合、例外をスローします。- static final int現在のトランザクションをサポートしません。むしろ、常に非トランザクションで実行します。- static final int現在のトランザクションをサポートします。存在しない場合は新しいものを作成します。- static final int新しいトランザクションを作成し、現在のトランザクションが存在する場合は中断します。- static final int現在のトランザクションをサポートします。存在しない場合は非トランザクションで実行します。- static final int基になるトランザクションシステムの既定のタイムアウトを使用するか、タイムアウトがサポートされていない場合はなしを使用します。
- メソッドのサマリー修飾子と型メソッド説明- default int分離レベルを返します。- default StringSE- getName()このトランザクションの名前を返します。- default int伝播動作を返します。- default intトランザクションタイムアウトを返します。- default boolean読み取り専用トランザクションとして最適化するかどうかを返します。- static TransactionDefinitionデフォルトで変更不可能な- TransactionDefinitionを返します。
- フィールドの詳細- PROPAGATION_REQUIREDstatic final int PROPAGATION_REQUIRED現在のトランザクションをサポートします。存在しない場合は新しいものを作成します。同じ名前の EJB トランザクション属性に似ています。- これは通常、トランザクション定義のデフォルト設定であり、通常はトランザクション同期スコープを定義します。 - 関連事項:
 
- PROPAGATION_SUPPORTSstatic final int PROPAGATION_SUPPORTS現在のトランザクションをサポートします。存在しない場合は非トランザクションで実行します。同じ名前の EJB トランザクション属性に似ています。- 注意 : トランザクション同期を使用するトランザクションマネージャーの場合、 - PROPAGATION_SUPPORTSは、同期が適用される可能性のあるトランザクションスコープを定義するため、トランザクションがまったくない場合とは少し異なります。結果として、同じリソース (JDBC- Connection、Hibernate- Sessionなど) が指定されたスコープ全体で共有されます。正確な動作は、トランザクションマネージャーの実際の同期構成に依存することに注意してください。- 一般に、 - PROPAGATION_SUPPORTSは注意して使用してください。特に、- PROPAGATION_SUPPORTSスコープ内で- PROPAGATION_REQUIREDまたは- PROPAGATION_REQUIRES_NEWに依存しないでください (実行時に同期の競合が発生する可能性があります)。このようなネスティングが避けられない場合は、トランザクションマネージャーを適切に構成してください (通常は、「実際のトランザクションでの同期」に切り替えます)。
- PROPAGATION_MANDATORYstatic final int PROPAGATION_MANDATORY現在のトランザクションをサポートします。現在のトランザクションが存在しない場合、例外をスローします。同じ名前の EJB トランザクション属性に似ています。- PROPAGATION_MANDATORYスコープ内のトランザクション同期は、常に周囲のトランザクションによって駆動されることに注意してください。- 関連事項:
 
- PROPAGATION_REQUIRES_NEWstatic final int PROPAGATION_REQUIRES_NEW新しいトランザクションを作成し、現在のトランザクションが存在する場合は中断します。同じ名前の EJB トランザクション属性に似ています。- 注意 : 実際のトランザクションの一時停止は、すべてのトランザクションマネージャーですぐに使用できるわけではありません。これは特に - JtaTransactionManagerに適用され、- jakarta.transaction.TransactionManagerを使用できるようにする必要があります(標準の Jakarta EE ではサーバー固有です)。- PROPAGATION_REQUIRES_NEWスコープは、常に独自のトランザクション同期を定義します。既存の同期は適切に一時停止および再開されます。
- PROPAGATION_NOT_SUPPORTEDstatic final int PROPAGATION_NOT_SUPPORTED現在のトランザクションをサポートしません。むしろ、常に非トランザクションで実行します。同じ名前の EJB トランザクション属性に似ています。- 注意 : 実際のトランザクションの一時停止は、すべてのトランザクションマネージャーですぐに使用できるわけではありません。これは特に - JtaTransactionManagerに適用され、- jakarta.transaction.TransactionManagerを使用できるようにする必要があります(標準の Jakarta EE ではサーバー固有です)。- トランザクション同期は - PROPAGATION_NOT_SUPPORTEDスコープ内では使用できないことに注意してください。既存の同期は一時停止され、適切に再開されます。
- PROPAGATION_NEVERstatic final int PROPAGATION_NEVER現在のトランザクションをサポートしません。現在のトランザクションが存在する場合は、例外をスローします。同じ名前の EJB トランザクション属性に類似しています。- トランザクション同期は - PROPAGATION_NEVERスコープ内では使用できないことに注意してください。- 関連事項:
 
- PROPAGATION_NESTEDstatic final int PROPAGATION_NESTED現在のトランザクションが存在する場合はネストされたトランザクション内で実行し、それ以外の場合は- PROPAGATION_REQUIREDのように動作します。EJB には類似の機能はありません。- 注意 : ネストされたトランザクションの実際の作成は、特定のトランザクションマネージャーでのみ機能します。デフォルトでは、これは JDBC 3.0+ ドライバーで作業する場合の JDBC - DataSourceTransactionManagerにのみ適用されます。一部の JTA プロバイダーは、ネストされたトランザクションもサポートしている場合があります。
- ISOLATION_DEFAULTstatic final int ISOLATION_DEFAULT基礎となるデータストアのデフォルトの分離レベルを使用します。- 他のすべてのレベルは、JDBC 分離レベルに対応します。 - 関連事項:
 
- ISOLATION_READ_UNCOMMITTEDstatic final int ISOLATION_READ_UNCOMMITTEDダーティリード、繰り返し不可能なリード、ファントムリードが発生する可能性があることを示します。- このレベルでは、あるトランザクションで変更された行を、その行の変更がコミットされる前に別のトランザクションで読み取ることができます(「ダーティリード」)。変更のいずれかがロールバックされると、2 番目のトランザクションが無効な行を取得します。 
- ISOLATION_READ_COMMITTEDstatic final int ISOLATION_READ_COMMITTEDダーティリードが防止されることを示します。繰り返し不可の読み取りとファントム読み取りが発生する可能性があります。- このレベルは、トランザクションがコミットされていない変更を含む行を読み取ることを禁止するだけです。 
- ISOLATION_REPEATABLE_READstatic final int ISOLATION_REPEATABLE_READダーティリードおよび繰り返し不可のリードが防止されることを示します。ファントムリードが発生する可能性があります。- このレベルは、トランザクションがコミットされていない変更を含む行を読み取ることを禁止します。また、1 つのトランザクションが行を読み取り、2 番目のトランザクションが行を変更し、最初のトランザクションが行を再度読み取り、2 番目に異なる値を取得する状況も禁止します。時間(「反復不能読み取り」)。 
- ISOLATION_SERIALIZABLEstatic final int ISOLATION_SERIALIZABLEダーティリード、繰り返し不可能なリード、ファントムリードが防止されることを示します。- このレベルには、 - ISOLATION_REPEATABLE_READの禁止事項が含まれ、1 つのトランザクションが- WHERE条件を満たすすべての行を読み取り、2 番目のトランザクションがその- WHERE条件を満たす行を挿入し、最初のトランザクションが同じ条件を再読み取りして、2 回目の読み取りでの追加の「ファントム」行。
- TIMEOUT_DEFAULTstatic final int TIMEOUT_DEFAULT基になるトランザクションシステムの既定のタイムアウトを使用するか、タイムアウトがサポートされていない場合はなしを使用します。- 関連事項:
 
 
- メソッドの詳細- getPropagationBehaviordefault int getPropagationBehavior()伝播動作を返します。- this interfaceで定義された- PROPAGATION_XXX定数のいずれかを返さなければなりません。- デフォルトは - PROPAGATION_REQUIREDです。
- getIsolationLeveldefault int getIsolationLevel()分離レベルを返します。- this interfaceで定義された- ISOLATION_XXX定数のいずれかを返さなければなりません。これらの定数は、- ConnectionSE の同じ定数の値と一致するように設計されています。- 新しく開始されたトランザクションにのみ適用されるため、 - PROPAGATION_REQUIREDまたは- PROPAGATION_REQUIRES_NEWで使用するために特別に設計されています。異なる分離レベルの既存のトランザクションに参加するときに分離レベルの宣言を拒否したい場合は、トランザクションマネージャーで "validateExistingTransactions" フラグを "true" に切り替えることを検討してください。- デフォルトは - ISOLATION_DEFAULTです。- ISOLATION_DEFAULT以外のレベルが指定された場合、カスタム分離レベルをサポートしないトランザクションマネージャーは例外をスローすることに注意してください。
- getTimeoutdefault int getTimeout()トランザクションタイムアウトを返します。- 秒数または - TIMEOUT_DEFAULTを返す必要があります。- 新たに開始されたトランザクションにのみ適用されるため、 - PROPAGATION_REQUIREDまたは- PROPAGATION_REQUIRES_NEWでの使用専用に設計されています。- タイムアウトをサポートしないトランザクションマネージャーは、 - TIMEOUT_DEFAULT以外のタイムアウトが指定された場合に例外をスローすることに注意してください。- デフォルトは - TIMEOUT_DEFAULTです。- 戻り値:
- トランザクションのタイムアウト
 
- isReadOnlydefault boolean isReadOnly()読み取り専用トランザクションとして最適化するかどうかを返します。- 読み取り専用フラグは、実際のリソーストランザクション( - PROPAGATION_REQUIRED/- PROPAGATION_REQUIRES_NEW)によって裏付けられているか、リソースレベルで非トランザクションで動作している(- PROPAGATION_SUPPORTS)かに関わらず、すべてのトランザクションコンテキストに適用されます。後者の場合、フラグは Hibernate- Sessionなどのアプリケーション内の管理対象リソースにのみ適用されます。- これは、実際のトランザクションサブシステムのヒントとしてのみ機能します。 必ずしも書き込みアクセスの試行が失敗するわけではありません。読み取り専用ヒントを解釈できないトランザクションマネージャーは、読み取り専用トランザクションを要求されたときに例外をスローしません。 - 戻り値:
-  トランザクションを読み取り専用として最適化する場合は true(デフォルトでfalse)
- 関連事項:
 
- getNameこのトランザクションの名前を返します。- nullにすることができます。- これは、該当する場合、トランザクションモニターに表示されるトランザクション名として使用されます。 - Spring の宣言的トランザクションの場合、公開される名前は - fully-qualified class name + "." + method name(デフォルト)です。- 戻り値:
-  このトランザクションの名前(デフォルトでは null}
- 関連事項:
 
- withDefaultsデフォルトで変更不可能な- TransactionDefinitionを返します。- カスタマイズの目的で、代わりに変更可能な - DefaultTransactionDefinitionを使用してください。- 導入:
- 5.2