@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/
因为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集合中。 控制器: