在使用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
的方法中,由于org.eclipse.persistence.exceptions.DatabaseException
,有时可能会发生SQLException
。我捕获此异常并通过另一个数据库查询处理该情况。但是,此查询无法通过,因为异常,setRollbackOnly会自动设置,此时我无法再提交事务。
在Java SE中,我会做一个明确的
manager.getTransaction().rollback();
manager.getTransaction().begin();
但在应用程序服务器中,这当然不起作用。
在这种情况下,我可以以某种方式让我的数据库更改提交吗?
答案 0 :(得分:1)
esej评论中给出的提示是解决方案: "在另一个用REQUIRES_NEW注释的bean上调用方法。"
由于
答案 1 :(得分:0)
当您尝试启动新的全局事务而前一个事务既未提交也不回滚时,您将“调用Routine等...”错误。
为了解决这个问题,您应该执行以下操作:
当您捕获第一个异常时,请不要将其留给容器以将事务标记为“rollback”。您必须手动将事务标记为回滚。