当前位置: 首页 > 面试题库 >

使用Spring和Hibernate的嵌套事务

微生毅
2023-03-14
问题内容

在我的应用程序中,有多个步骤,其中将通过多种方法对数据库进行多次提交。例:

A -> B -> C
       -> D
           ->E
       -> F
  -> G

A呼叫B,再呼叫C。然后B呼叫D。D呼叫E,依此类推。所有这些方法都有一些数据库操作。据我了解PROPAGATION_REQUIRED(声明式事务管理-
春天推荐的方式),如果 E* 成功完成,则事务(以及 E中的 操作将被提交)。现在,由于某些例外, F 应该导致回滚。我想 从
A 做起的 所有事情都 回滚。是否可以通过声明式事务管理?还是应该使用程序化交易管理?
*

谢谢。


问题答案:

首先,从某种意义上说,不支持“嵌套”事务,即afaik。

然后,propagation=REQUIRED意味着所有具有该传播的方法将:

  • 如果不存在,则开始新交易
  • 参与现有交易(如果存在)。

这意味着在您的方案中,失败F将回滚整个事务(因为它是单个事务,由A发起,并传播到其他方法)



 类似资料:
  • 我有一个使用Hibernate/JPA的持久性Spring Boot应用程序。 我正在使用事务来管理我的数据库持久性,并且我正在使用注释来定义应该以事务方式执行的方法。 在持久化时,我有三个主要的事务粒度级别: 要保留的实体批次 要保留的单个实体 保留实体的单一数据库操作 因此,在考虑整个持久性流量时,您可以想象我有三个级别的嵌套事务。 第2层和第3层之间的交互如我所愿透明地工作,因为在没有为事务

  • 我试图用不同的事务管理器嵌套事务,其中如果嵌套的事务失败,外部主事务也需要回滚 我的spring配置文件有 但是,当失败时,中的事务不会回滚。如何使回滚工作?

  • 在db会话监视器中,当这种情况发生时,我得到了一个不活动的事务。 我得到的错误如下: 问题是交易和连接应该自动打开和关闭...我希望并发修改失败的事务得到回滚...但似乎他们变得不活跃了。

  • 我按照http://spring.io/guides/gs/consulting-rest/使用rest服务。本教程只提到一个单层JSON文件。但是,我希望解析一个json 当我通过spring-boot run运行该命令时,我在命令行中得到以下结果: 有什么我没看到的吗?

  • 我正在寻找HAL中嵌套_embedded如何使用Spring HATEOAS API编程的例子。最佳实践是什么? 下面是我想要实现的一个例子:

  • 如果一个服务方法被标记为具有传播嵌套的,并且在它内部有许多对其他方法的调用,那么这些方法中的每一个都将使用自己的会话?它应该表示多个连接到db,只有一个方法调用no?