java - Spring Boot Hibernate高效事务管理

标签 java spring hibernate spring-boot spring-transactions

在与 Hibernate JPA 集成的 Spring Boot 应用程序中。事务管理有哪些不同且最有效的方式以及针对不同场景需要考虑的重点是什么。

此时,我们在来自 Controller 层的服务层调用上使用@Transactional注释;服务层因此执行各种读/写 DAO 调用。使用 @Transactional 的 DAO 方法。

在必须简单的基本场景中,这对我们在单个服务层调用中对单个实体进行操作并且我们希望将完整的操作集封装在单个事务中的情况非常有用。

但是如果我们希望根据具体情况采取不同的行为怎么办?例如如果我们有一个对服务层调用内的一组实体进行操作的循环,并且虽然我们希望对每个实体的操作都是事务性的,但如果我们不希望整个循环是单个事务。或者,如果在对特定实体进行操作时,需要作为工作流的一部分执行多个操作,则可能需要这些工作流的子集在出现异常/错误情况时不影响在它们之前执行的操作在子集中。

我知道有很多不同的方法可以实现这一目标,但我一直在寻找最佳、最高效和有效方法的线索。

提前致谢!!

最佳答案

if we have a loop operating on a set of entities inside the service layer call, and although we want operations on every entity to be transactional,

在事务方法中迭代非事务和处理交互项,或者使用 Propagation.REQUIRES_NEW@Transactional 中进行事务和处理交互

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html#isolation--

最后的结果是,自己处理事务。 https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/transaction.html

OR, if when operating on a particular entity, several operations need to be performed as part of a workflow, a subset of these workflows may be desirable to have no impact on the operations that were performed before them in case of an exception/ error scenario in the subset.

典型的长时间运行事务

最好避免这种情况 - 例如,分多个步骤创建契约(Contract)草案 - 最后 - 将该契约(Contract)序列化为适当的实体并将其保留在单个事务中。

关于java - Spring Boot Hibernate高效事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51809797/

相关文章:

mysql - 使用 JPA/Spring/Hibernate 自动截断字符串列的方法?

java - 如何使用 Hibernate 注释在连接表上创建索引?

java - 我可以使用通用方法来访问 hibernate 中不同实体的数据吗

java - Android 中 String.join 的替代方案?

java - 抽象静态成员初始化

java - 用 Java 解析 XML

java - 无法从类路径加载属性文件

java - 当我从 Android 迁移到 AndroidX 时,在我的项目中实现 google play 服务时出错。可能的解决方案是什么?

java - Spring Jpa - hibernate 在数据库中保存一行空值

java - 无法在 Spring RestController 中调用 REST 服务