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

事务回滚和保存信息

罗翰
2023-03-14
@Transactional
public void process() throws ProcessPaymentException{ 
    try{
    .... do some operation
    catch (ProcessPaymentException ppe) {
        save db problem issue.
    }
}

如果这个链接正确,嵌套事务可能是一个解决方案https://www.credera.com/blog/technology-insights/java/common-oversights-usegry-nested-transactions-spring/

共有1个答案

瞿和硕
2023-03-14

因为try-catch的进程由同一个事务包装。每当引发异常时,事务管理器都会进行回滚。所以,没有东西会被拯救。

是否有一种方法可以在try中回滚进程,但在catch中进行保存?

是的。创建异常处理程序以保存回滚后的数据库问题。这就是想法

@ControllerAdvice
public class HandlerName {
    @ExceptionHandler(ProcessPaymentException.class)
    public void saveDbIssue(ProcessPaymentException ex) {
        // save db problem issue.
}
 类似资料:
  • 问题内容: 我正在尝试创建一个保存对象的视图,但是如果引发某些异常,我想 撤消 该保存。这是我尝试的: 我究竟做错了什么?即使引发异常,它仍然在数据库中。 问题答案: 原子性文档 总而言之,如果视图产生的响应没有错误,将在数据库上执行事务。因为您自己正在捕获异常,所以在Django中,您的视图执行得很好。 如果发现异常,则需要自己处理:控制事务 如果在发生故障时需要产生适当的json响应:

  • 问题内容: 在Hibernate中,当我在事务中有一个对象,然后回滚它时,保存的对象仍保留在DB中。奇怪,因为使用or 方法不会发生此问题,而只会使用。 这是我正在使用的代码: 这是 HibernateUtil 类(只是涉及的函数,我保证该方法能正常工作- 有一个Interceptor处理程序,但现在不重要了): 谢谢 问题答案: 检查数据库是否支持回滚,即是否使用的是InnoDB表而不是MyIS

  • 问题内容: 我在EJB3无状态会话Bean中使用CMT。另外,我还创建了自己的具有注释“ @ApplicationException(rollback = true)”的异常。 要回滚事务时是否必须使用“ context.setRollbackOnly()”? 我可以通过在bean的public方法内抛出异常来回滚事务吗? 如果是这样(对Q#2的回答是“是”),我是否必须通过在方法中声明异常来将异

  • 我正在使用spring-test运行JUnit测试,我的代码如下所示 我的问题是我希望我的测试不影响其他测试。所以我想为每个测试创建一些类似回滚的东西。我为此找了很多,但到目前为止一无所获。我使用Hibernate和MySql来实现这个

  • -ZJ 以下是我在Application.Properties中的数据源设置:

  • 我在Spring Boot应用程序中有一个Javers实现。Mongo4.4被用作数据库。从MongoDB4.4开始,您可以在事务中创建文档。 我在创建对象时模拟了一个异常。如预期的那样,对象没有在数据库中创建,但是一个新的快照被添加到jv_snapshots集合中。 控制器: