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