@Target(value={METHOD,TYPE})
@Retention(value=RUNTIME)
@Inherited
@Documented
public @interface Transactional
This annotation type is generally directly comparable to Spring's
RuleBasedTransactionAttribute
class, and in fact AnnotationTransactionAttributeSource
will directly
convert the data to the latter class, so that Spring's transaction support code
does not have to know about annotations. If no rules are relevant to the exception,
it will be treated like
DefaultTransactionAttribute
(rolling back on RuntimeException
and Error
but not on checked
exceptions).
For specific information about the semantics of this annotation's attributes,
consult the TransactionDefinition
and
TransactionAttribute
javadocs.
TransactionAttribute
,
DefaultTransactionAttribute
,
RuleBasedTransactionAttribute
Modifier and Type | Optional Element and Description |
---|---|
Isolation |
isolation
The transaction isolation level.
|
java.lang.Class<? extends java.lang.Throwable>[] |
noRollbackFor
Defines zero (0) or more exception
Classes , which must be
subclasses of Throwable , indicating which exception types must
not cause a transaction rollback. |
java.lang.String[] |
noRollbackForClassName
Defines zero (0) or more exception names (for exceptions which must be a
subclass of
Throwable ) indicating which exception types must not
cause a transaction rollback. |
Propagation |
propagation
The transaction propagation type.
|
boolean |
readOnly
A boolean flag that can be set to
true if the transaction is
effectively read-only, allowing for corresponding optimizations at runtime. |
java.lang.Class<? extends java.lang.Throwable>[] |
rollbackFor
Defines zero (0) or more exception
classes , which must be
subclasses of Throwable , indicating which exception types must cause
a transaction rollback. |
java.lang.String[] |
rollbackForClassName
Defines zero (0) or more exception names (for exceptions which must be a
subclass of
Throwable ), indicating which exception types must cause
a transaction rollback. |
int |
timeout
The timeout for this transaction (in seconds).
|
java.lang.String |
transactionManager
A qualifier value for the specified transaction.
|
java.lang.String |
value
Alias for
transactionManager() . |
@AliasFor(value="transactionManager") public abstract java.lang.String value
transactionManager()
.transactionManager()
@AliasFor(value="value") public abstract java.lang.String transactionManager
May be used to determine the target transaction manager,
matching the qualifier value (or the bean name) of a specific
PlatformTransactionManager
bean definition.
value()
public abstract Propagation propagation
Defaults to Propagation.REQUIRED
.
public abstract Isolation isolation
Defaults to Isolation.DEFAULT
.
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.
TransactionDefinition.getIsolationLevel()
,
AbstractPlatformTransactionManager.setValidateExistingTransaction(boolean)
public abstract int timeout
Defaults to the default timeout of the underlying transaction system.
Exclusively designed for use with Propagation.REQUIRED
or
Propagation.REQUIRES_NEW
since it only applies to newly started
transactions.
TransactionDefinition.getTimeout()
public abstract boolean readOnly
true
if the transaction is
effectively read-only, allowing for corresponding optimizations at runtime.
Defaults to false
.
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 but rather silently ignore the hint.
TransactionDefinition.isReadOnly()
,
TransactionSynchronizationManager.isCurrentTransactionReadOnly()
public abstract java.lang.Class<? extends java.lang.Throwable>[] rollbackFor
classes
, which must be
subclasses of Throwable
, indicating which exception types must cause
a transaction rollback.
By default, a transaction will be rolling back on RuntimeException
and Error
but not on checked exceptions (business exceptions). See
DefaultTransactionAttribute.rollbackOn(Throwable)
for a detailed explanation.
This is the preferred way to construct a rollback rule (in contrast to
rollbackForClassName()
), matching the exception class and its subclasses.
Similar to RollbackRuleAttribute.RollbackRuleAttribute(Class clazz)
.
public abstract java.lang.String[] rollbackForClassName
Throwable
), indicating which exception types must cause
a transaction rollback.
This can be a substring of a fully qualified class name, with no wildcard
support at present. For example, a value of "ServletException"
would
match javax.servlet.ServletException
and its subclasses.
NB: Consider carefully how specific the pattern is and whether
to include package information (which isn't mandatory). For example,
"Exception"
will match nearly anything and will probably hide other
rules. "java.lang.Exception"
would be correct if "Exception"
were meant to define a rule for all checked exceptions. With more unusual
Exception
names such as "BaseBusinessException"
there is no
need to use a FQN.
Similar to RollbackRuleAttribute.RollbackRuleAttribute(String exceptionName)
.
public abstract java.lang.Class<? extends java.lang.Throwable>[] noRollbackFor
Classes
, which must be
subclasses of Throwable
, indicating which exception types must
not cause a transaction rollback.
This is the preferred way to construct a rollback rule (in contrast
to noRollbackForClassName()
), matching the exception class and
its subclasses.
Similar to NoRollbackRuleAttribute.NoRollbackRuleAttribute(Class clazz)
.
public abstract java.lang.String[] noRollbackForClassName
Throwable
) indicating which exception types must not
cause a transaction rollback.
See the description of rollbackForClassName()
for further
information on how the specified names are treated.
Similar to NoRollbackRuleAttribute.NoRollbackRuleAttribute(String exceptionName)
.