Interface TransactionDefinition

All Known Subinterfaces:
ResourceTransactionDefinition, TransactionAttribute
All Known Implementing Classes:
DefaultTransactionAttribute, DefaultTransactionDefinition, DelegatingTransactionAttribute, DelegatingTransactionDefinition, RuleBasedTransactionAttribute, TransactionTemplate

public interface TransactionDefinition
Interface that defines Spring-compliant transaction properties. Based on the propagation behavior definitions analogous to EJB CMT attributes.

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.

Since:
08.05.2003
Author:
Juergen Hoeller
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    Use the default isolation level of the underlying datastore.
    static final int
    Indicates that dirty reads are prevented; non-repeatable reads and phantom reads can occur.
    static final int
    Indicates that dirty reads, non-repeatable reads, and phantom reads can occur.
    static final int
    Indicates that dirty reads and non-repeatable reads are prevented; phantom reads can occur.
    static final int
    Indicates that dirty reads, non-repeatable reads, and phantom reads are prevented.
    static final int
    Support a current transaction; throw an exception if no current transaction exists.
    static final int
    Execute within a nested transaction if a current transaction exists, behaving like PROPAGATION_REQUIRED otherwise.
    static final int
    Do not support a current transaction; throw an exception if a current transaction exists.
    static final int
    Do not support a current transaction; rather always execute non-transactionally.
    static final int
    Support a current transaction; create a new one if none exists.
    static final int
    Create a new transaction, suspending the current transaction if one exists.
    static final int
    Support a current transaction; execute non-transactionally if none exists.
    static final int
    Use the default timeout of the underlying transaction system, or none if timeouts are not supported.
  • Method Summary

    Modifier and Type
    Method
    Description
    default int
    Return the isolation level.
    default String
    Return the name of this transaction.
    default int
    Return the propagation behavior.
    default int
    Return the transaction timeout.
    default boolean
    Return whether to optimize as a read-only transaction.
    Return an unmodifiable TransactionDefinition with defaults.
  • Field Details

    • PROPAGATION_REQUIRED

      static final int PROPAGATION_REQUIRED
      Support a current transaction; create a new one if none exists. Analogous to the EJB transaction attribute of the same name.

      This is typically the default setting of a transaction definition and typically defines a transaction synchronization scope.

      See Also:
    • PROPAGATION_SUPPORTS

      static final int PROPAGATION_SUPPORTS
      Support a current transaction; execute non-transactionally if none exists. Analogous to the EJB transaction attribute of the same name.

      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").

      See Also:
    • PROPAGATION_MANDATORY

      static final int PROPAGATION_MANDATORY
      Support a current transaction; throw an exception if no current transaction exists. Analogous to the EJB transaction attribute of the same name.

      Note that transaction synchronization within a PROPAGATION_MANDATORY scope will always be driven by the surrounding transaction.

      See Also:
    • PROPAGATION_REQUIRES_NEW

      static final int PROPAGATION_REQUIRES_NEW
      Create a new transaction, suspending the current transaction if one exists. Analogous to the EJB transaction attribute of the same name.

      NOTE: Actual transaction suspension will not work out-of-the-box on all transaction managers. This in particular applies to JtaTransactionManager, which requires the jakarta.transaction.TransactionManager to be made available to it (which is server-specific in standard Jakarta EE).

      A PROPAGATION_REQUIRES_NEW scope always defines its own transaction synchronizations. Existing synchronizations will be suspended and resumed appropriately.

      See Also:
    • PROPAGATION_NOT_SUPPORTED

      static final int PROPAGATION_NOT_SUPPORTED
      Do not support a current transaction; rather always execute non-transactionally. Analogous to the EJB transaction attribute of the same name.

      NOTE: Actual transaction suspension will not work out-of-the-box on all transaction managers. This in particular applies to JtaTransactionManager, which requires the jakarta.transaction.TransactionManager to be made available to it (which is server-specific in standard Jakarta EE).

      Note that transaction synchronization is not available within a PROPAGATION_NOT_SUPPORTED scope. Existing synchronizations will be suspended and resumed appropriately.

      See Also:
    • PROPAGATION_NEVER

      static final int PROPAGATION_NEVER
      Do not support a current transaction; throw an exception if a current transaction exists. Analogous to the EJB transaction attribute of the same name.

      Note that transaction synchronization is not available within a PROPAGATION_NEVER scope.

      See Also:
    • PROPAGATION_NESTED

      static final int PROPAGATION_NESTED
      Execute within a nested transaction if a current transaction exists, behaving like 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 DataSourceTransactionManager when working on a JDBC 3.0 driver. Some JTA providers might support nested transactions as well.

      See Also:
    • ISOLATION_DEFAULT

      static final int ISOLATION_DEFAULT
      Use the default isolation level of the underlying datastore.

      All other levels correspond to the JDBC isolation levels.

      See Also:
    • ISOLATION_READ_UNCOMMITTED

      static final int ISOLATION_READ_UNCOMMITTED
      Indicates that dirty reads, non-repeatable reads, and phantom reads can occur.

      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.

      See Also:
    • ISOLATION_READ_COMMITTED

      static final int ISOLATION_READ_COMMITTED
      Indicates that dirty reads are prevented; non-repeatable reads and phantom reads can occur.

      This level only prohibits a transaction from reading a row with uncommitted changes in it.

      See Also:
    • ISOLATION_REPEATABLE_READ

      static final int ISOLATION_REPEATABLE_READ
      Indicates that dirty reads and non-repeatable reads are prevented; phantom reads can occur.

      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").

      See Also:
    • ISOLATION_SERIALIZABLE

      static final int ISOLATION_SERIALIZABLE
      Indicates that dirty reads, non-repeatable reads, and phantom reads are prevented.

      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.

      See Also:
    • TIMEOUT_DEFAULT

      static final int TIMEOUT_DEFAULT
      Use the default timeout of the underlying transaction system, or none if timeouts are not supported.
      See Also:
  • Method Details