当前位置: 首页 > 知识库问答 >
问题:

异常后提交事务 - 撤消设置仅回滚

谢昊乾
2023-03-14

在我的@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)方法中,由于SQLException,有时会发生org.eclipse.persistence.exceptions.DatabaseException。我捕获了此异常并通过另一个数据库查询处理这种情况。但是,此查询无法通过,因为由于异常,setRollbackOnly 会自动设置,此时我无法再提交事务。

在Java SE中

manager.getTransaction().rollback();
manager.getTransaction().begin();

但在应用服务器内,这当然不起作用。

在这种情况下,我能以某种方式提交数据库更改吗?

共有2个答案

宰父阳焱
2023-03-14

当您试图启动一个新的全局事务而上一个事务既没有提交也没有回滚时,您将出现“例程被调用等”错误。

为了解决这个问题,您应该执行以下操作:

当您捕捉到第一个异常时,不要让容器将其标记为“回滚”。您必须手动将事务标记为回滚。

冯卓
2023-03-14

esej的评论中给出的提示是解决方案:“在另一个用REQUIRES_NEW注释的bean上调用一个方法。

谢谢

 类似资料:
  • 我正在使用手动事务时插入/更新3个表。我想在事务提交后立即插入到历史表中。这意味着有3个操作(针对每个表),只有在提交这些操作之后,我才希望调用一个方法。 这是我的代码: 有什么post commit方法吗?如何在提交之后而不是持久之后调用方法?

  • 我有一个用Hibernate作为ORM的Spring应用程序 在带有的保存方法中,实体被保存,保存该行后,我为回滚事务抛出一个异常。如下所示, 在应用程序控制台中,我看到这一行: 如果我在PL/SQL上运行这个查询,增加了,有了一个新值。但是在上述代码已经过去了,没有增加。 所以我的问题是:Oracle在事务回滚后会减少顺序吗?还是预言机的临时表撤消此增加?还是Hibernate管理它?换句话说,

  • 我正在使用Spring JpaRepository在我的一个应用程序屏幕中实现CRUD。作为其中的一部分,我正在开发一个功能,用户可以保存所有汽车实体或没有(应该回滚)到数据库。我不确定如何使用Spring Boot、Spring Rest和Spring JPA实现此功能。 下面是我的源代码。 除此之外,我还得到了一个类似 请帮帮我。谢谢你。

  • 我正在应用程序中使用Windows Azure SQL Server,当我连接到应用程序时,它显示以下错误。 hibernate.cfg.xml: .................. http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/cont

  • 我在tomcat服务器中使用具有多个数据源配置的JTA原子事务。有时我会遇到以下异常: JTA事务意外回滚(可能是由于超时);嵌套的异常是javax。交易回滚异常:事务被设置为仅回滚 出现这种异常的原因是什么?

  • 我是WebServices的新手。Im通过标记为“Transacted”的camel路由向cxfendpoint发送webservice请求,并得到响应。在同一事务路由中,next语句抛出一个异常,以便我的异常处理程序回滚该事务。 我可以在我的事务回滚中找到其他东西,除了我的webservice请求响应,因为它已经提交了。

  • 以下是使用事务教程中描述的提交和回滚的代码示例。 此示例代码是基于前面章节中完成的环境和数据库设置编写的。 复制并将以下示例代码保存到:CommitAndRollback.java 中,编译并运行如下 - 编译并运行结果如下 -

  • 这很好,但并不总是在代码中抛出运行时异常。因此,我挖掘并发现如下所示的rollbackFor; 现在,我必须更改所有代码,以使用RollBackfor更改@Transactional。但是还有其他方法可以将所有@transaction advice属性更改为rollbackFor=exception.class吗?