范围

名称 说明
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();
}