在与 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/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/