11.7.2.3. 回滚事务
此流程演示了如何使用 Jakarta Transactions 回滚事务。
先决条件
您必须先开始事务,然后才能回滚。有关如何开始交易的详情,请参考开始交易。
在
UserTransaction
上调用rollback()
方法。当您在
UserTransaction
上调用rollback()
方法时,TM 会尝试回滚事务并将数据返回到之前的状态。@Inject private UserTransaction userTransaction; public void updateTable(String key, String value) EntityManager entityManager = entityManagerFactory.createEntityManager(); try { userTransaction.begin(): <!-- Perform some data manipulation using entityManager --> ... // Commit the transaction userTransaction.commit(); } catch (Exception ex) { <!-- Log message or notify Web page --> ... try { userTransaction.rollback(); } catch (SystemException se) { throw new RuntimeException(se); } throw new RuntimeException(e); } finally { entityManager.close(); } }
如果使用容器管理事务(CMT),则不需要手动回滚事务。
如果将 Bean 配置为使用容器管理交易,则容器将根据您在代码中配置的注解来管理您的事务生命周期。
注意
如果抛出 RuntimeException,则 CMT 会出现回滚。您还可以显式调用 setRollbackOnly 方法以获取回滚。或者,将 @ApplicationException(rollback=true)用于回滚应用异常。
结果
您的事务由 TM 回滚。
注意
有关完整示例,请参阅 Jakarta Transactions 交易示例。