范围
名称 | 说明 |
---|---|
REQUIRED | 使用现有事务,如果不存在,则启动一个新事务。这是默认范围。 |
MANDATORY | 必须已经启动事务。抛出 TransactionRequiredException。 |
SUPPORTS | 如果存在现有事务,则使用该事务,否则该方法不会在事务中运行。谨慎使用此方法。 |
REQUIRES_NEW | 始终启动一个新事务。如果需要,则挂起现有事务。 |
NOT_SUPPORTED | 如果需要,则挂起现有事务。该方法在没有事务的情况下运行。 |
NEVER | 如果存在现有事务,则抛出异常。该方法在没有事务的情况下运行。 |
REQUIRED 为默认值
未指定时的默认事务范围为REQUIRED
。这是大多数应用程序中最常用的事务范围。
使用 @Transactional 的示例
我们可以在使用 @Transactional
注释的方法上指定其他事务范围。
@Transactional(type = TxType.REQUIRES_NEW)
public void doInner() {
// execute using a new transaction ...
}
使用 beginTransaction() 的示例
我们可以通过 beginTransaction(TxScope)
指定其他事务范围。
try (Transaction transaction = database.beginTransaction(TxScope.requiresNew())) {
// using a new transaction ...
transaction.commit();
}