跳到主要内容

事务(transaction)

事务是一组操作的集合, 这些操作作为一个单元执行, 确保数据的一致性和完整性. Graphoenix 根据 Jakarta Transactions 协议对事务进行管理

事务注解

使用 @Transactional 注解声明事务

@GraphQLApi
@ApplicationScoped
public class SystemApi {

@Mutation
@Transactional
public RegisterResult register(RegisterInput registerInput) {
// ...
}

}

@Transactional

属性类型默认值说明
valueTxTypeREQUIRED事务传播类型
rollbackOnClass[]--需要回滚的异常类, 优先级低于 dontRollbackOn
dontRollbackOnClass[]--不需要回滚的异常类, 优先级高于 rollbackOn

TxType

类型说明
REQUIRED如果在事务上下文之外调用, 拦截器必须开始新的 Jakarta Transactions 事务, 托管 bean 方法的执行必须在此事务上下文内继续, 并且事务必须由拦截器完成
如果在事务上下文内调用, 托管 bean 方法的执行必须在此事务上下文内继续
REQUIRES_NEW如果在事务上下文之外调用, 拦截器必须开始新的 Jakarta Transactions 事务, 托管 bean 方法的执行必须在此事务上下文内继续, 并且事务必须由拦截器完成
如果在事务上下文内调用, 则必须暂停当前事务上下文, 开始新的 Jakarta Transactions 事务, 托管 bean 方法的执行必须在此事务上下文内继续, 事务必须完成, 并且必须恢复先前暂停的事务
MANDATORY如果在事务上下文之外调用, 则必须抛出嵌套 TransactionalException 的 TransactionRequiredException
如果在事务上下文内调用, 则托管 bean 方法将在该上下文中继续执行
SUPPORTS如果在事务上下文之外调用, 则托管 bean 方法的执行必须在事务上下文之外继续
如果在事务上下文内调用, 则托管 bean 方法的执行必须在该事务上下文内继续
NOT_SUPPORTED如果在事务上下文之外调用, 则托管 bean 方法的执行必须在事务上下文之外继续
如果在事务上下文内调用, 则必须暂停当前事务上下文, 然后托管 bean 方法的执行必须在事务上下文之外继续, 并且之前暂停的事务必须在方法执行完成后由暂停它的拦截器恢复
NEVER如果在事务上下文之外调用, 则托管 bean 方法执行必须在事务上下文之外继续
如果在事务上下文内调用, 则必须抛出嵌套 TransactionalException 的 InvalidTransactionException