public interface TransactionDefinition
Note that isolation level and timeout settings will not get applied unless
 an actual new transaction gets started. As only PROPAGATION_REQUIRED,
 PROPAGATION_REQUIRES_NEW and PROPAGATION_NESTED can cause
 that, it usually doesn't make sense to specify those settings in other cases.
 Furthermore, be aware that not all transaction managers will support those
 advanced features and thus might throw corresponding exceptions when given
 non-default values.
 
The read-only flag applies to any transaction context,
 whether backed by an actual resource transaction or operating non-transactionally
 at the resource level. In the latter case, the flag will only apply to managed
 resources within the application, such as a Hibernate Session.
PlatformTransactionManager.getTransaction(TransactionDefinition), 
DefaultTransactionDefinition, 
TransactionAttribute| Modifier and Type | Field and Description | 
|---|---|
| static int | ISOLATION_DEFAULTUse the default isolation level of the underlying datastore. | 
| static int | ISOLATION_READ_COMMITTEDIndicates that dirty reads are prevented; non-repeatable reads and
 phantom reads can occur. | 
| static int | ISOLATION_READ_UNCOMMITTEDIndicates that dirty reads, non-repeatable reads and phantom reads
 can occur. | 
| static int | ISOLATION_REPEATABLE_READIndicates that dirty reads and non-repeatable reads are prevented;
 phantom reads can occur. | 
| static int | ISOLATION_SERIALIZABLEIndicates that dirty reads, non-repeatable reads and phantom reads
 are prevented. | 
| static int | PROPAGATION_MANDATORYSupport a current transaction; throw an exception if no current transaction
 exists. | 
| static int | PROPAGATION_NESTEDExecute within a nested transaction if a current transaction exists,
 behave like  PROPAGATION_REQUIREDotherwise. | 
| static int | PROPAGATION_NEVERDo not support a current transaction; throw an exception if a current transaction
 exists. | 
| static int | PROPAGATION_NOT_SUPPORTEDDo not support a current transaction; rather always execute non-transactionally. | 
| static int | PROPAGATION_REQUIREDSupport a current transaction; create a new one if none exists. | 
| static int | PROPAGATION_REQUIRES_NEWCreate a new transaction, suspending the current transaction if one exists. | 
| static int | PROPAGATION_SUPPORTSSupport a current transaction; execute non-transactionally if none exists. | 
| static int | TIMEOUT_DEFAULTUse the default timeout of the underlying transaction system,
 or none if timeouts are not supported. | 
| Modifier and Type | Method and Description | 
|---|---|
| default int | getIsolationLevel()Return the isolation level. | 
| default String | getName()Return the name of this transaction. | 
| default int | getPropagationBehavior()Return the propagation behavior. | 
| default int | getTimeout()Return the transaction timeout. | 
| default boolean | isReadOnly()Return whether to optimize as a read-only transaction. | 
| static TransactionDefinition | withDefaults()Return an unmodifiable  TransactionDefinitionwith defaults. | 
static final int PROPAGATION_REQUIRED
This is typically the default setting of a transaction definition, and typically defines a transaction synchronization scope.
static final int PROPAGATION_SUPPORTS
NOTE: For transaction managers with transaction synchronization,
 PROPAGATION_SUPPORTS is slightly different from no transaction
 at all, as it defines a transaction scope that synchronization might apply to.
 As a consequence, the same resources (a JDBC Connection, a
 Hibernate Session, etc) will be shared for the entire specified
 scope. Note that the exact behavior depends on the actual synchronization
 configuration of the transaction manager!
 
In general, use PROPAGATION_SUPPORTS with care! In particular, do
 not rely on PROPAGATION_REQUIRED or PROPAGATION_REQUIRES_NEW
 within a PROPAGATION_SUPPORTS scope (which may lead to
 synchronization conflicts at runtime). If such nesting is unavoidable, make sure
 to configure your transaction manager appropriately (typically switching to
 "synchronization on actual transaction").
static final int PROPAGATION_MANDATORY
Note that transaction synchronization within a PROPAGATION_MANDATORY
 scope will always be driven by the surrounding transaction.
static final int PROPAGATION_REQUIRES_NEW
NOTE: Actual transaction suspension will not work out-of-the-box
 on all transaction managers. This in particular applies to
 JtaTransactionManager,
 which requires the javax.transaction.TransactionManager to be
 made available it to it (which is server-specific in standard Java EE).
 
A PROPAGATION_REQUIRES_NEW scope always defines its own
 transaction synchronizations. Existing synchronizations will be suspended
 and resumed appropriately.
static final int PROPAGATION_NOT_SUPPORTED
NOTE: Actual transaction suspension will not work out-of-the-box
 on all transaction managers. This in particular applies to
 JtaTransactionManager,
 which requires the javax.transaction.TransactionManager to be
 made available it to it (which is server-specific in standard Java EE).
 
Note that transaction synchronization is not available within a
 PROPAGATION_NOT_SUPPORTED scope. Existing synchronizations
 will be suspended and resumed appropriately.
static final int PROPAGATION_NEVER
Note that transaction synchronization is not available within a
 PROPAGATION_NEVER scope.
static final int PROPAGATION_NESTED
PROPAGATION_REQUIRED otherwise. There is no
 analogous feature in EJB.
 NOTE: Actual creation of a nested transaction will only work on
 specific transaction managers. Out of the box, this only applies to the JDBC
 org.springframework.jdbc.datasource.DataSourceTransactionManager
 when working on a JDBC 3.0 driver. Some JTA providers might support
 nested transactions as well.
org.springframework.jdbc.datasource.DataSourceTransactionManager, 
Constant Field Valuesstatic final int ISOLATION_DEFAULT
Connection, 
Constant Field Valuesstatic final int ISOLATION_READ_UNCOMMITTED
This level allows a row changed by one transaction to be read by another transaction before any changes in that row have been committed (a "dirty read"). If any of the changes are rolled back, the second transaction will have retrieved an invalid row.
static final int ISOLATION_READ_COMMITTED
This level only prohibits a transaction from reading a row with uncommitted changes in it.
static final int ISOLATION_REPEATABLE_READ
This level prohibits a transaction from reading a row with uncommitted changes in it, and it also prohibits the situation where one transaction reads a row, a second transaction alters the row, and the first transaction re-reads the row, getting different values the second time (a "non-repeatable read").
static final int ISOLATION_SERIALIZABLE
This level includes the prohibitions in ISOLATION_REPEATABLE_READ
 and further prohibits the situation where one transaction reads all rows that
 satisfy a WHERE condition, a second transaction inserts a row
 that satisfies that WHERE condition, and the first transaction
 re-reads for the same condition, retrieving the additional "phantom" row
 in the second read.
static final int TIMEOUT_DEFAULT
default int getPropagationBehavior()
Must return one of the PROPAGATION_XXX constants
 defined on this interface.
 
The default is PROPAGATION_REQUIRED.
PROPAGATION_REQUIRED, 
TransactionSynchronizationManager.isActualTransactionActive()default int getIsolationLevel()
Must return one of the ISOLATION_XXX constants defined on
 this interface. Those constants are designed
 to match the values of the same constants on Connection.
 
Exclusively designed for use with PROPAGATION_REQUIRED or
 PROPAGATION_REQUIRES_NEW since it only applies to newly started
 transactions. Consider switching the "validateExistingTransactions" flag to
 "true" on your transaction manager if you'd like isolation level declarations
 to get rejected when participating in an existing transaction with a different
 isolation level.
 
The default is ISOLATION_DEFAULT. Note that a transaction manager
 that does not support custom isolation levels will throw an exception when
 given any other level than ISOLATION_DEFAULT.
ISOLATION_DEFAULT, 
AbstractPlatformTransactionManager.setValidateExistingTransaction(boolean)default int getTimeout()
Must return a number of seconds, or TIMEOUT_DEFAULT.
 
Exclusively designed for use with PROPAGATION_REQUIRED or
 PROPAGATION_REQUIRES_NEW since it only applies to newly started
 transactions.
 
Note that a transaction manager that does not support timeouts will throw
 an exception when given any other timeout than TIMEOUT_DEFAULT.
 
The default is TIMEOUT_DEFAULT.
default boolean isReadOnly()
The read-only flag applies to any transaction context, whether backed
 by an actual resource transaction (PROPAGATION_REQUIRED/
 PROPAGATION_REQUIRES_NEW) or operating non-transactionally at
 the resource level (PROPAGATION_SUPPORTS). In the latter case,
 the flag will only apply to managed resources within the application,
 such as a Hibernate Session.
 
This just serves as a hint for the actual transaction subsystem; it will not necessarily cause failure of write access attempts. A transaction manager which cannot interpret the read-only hint will not throw an exception when asked for a read-only transaction.
true if the transaction is to be optimized as read-only
 (false by default)TransactionSynchronization.beforeCommit(boolean), 
TransactionSynchronizationManager.isCurrentTransactionReadOnly()@Nullable default String getName()
null.
 This will be used as the transaction name to be shown in a transaction monitor, if applicable (for example, WebLogic's).
In case of Spring's declarative transactions, the exposed name will be
 the fully-qualified class name + "." + method name (by default).
null by default}TransactionAspectSupport, 
TransactionSynchronizationManager.getCurrentTransactionName()static TransactionDefinition withDefaults()
TransactionDefinition with defaults.
 For customization purposes, use the modifiable
 DefaultTransactionDefinition
 instead.