Java Spring Boot Hibernate高效事务管理
在与Hibernate JPA集成的spring引导应用程序中。什么是不同的、最有效的事务管理方法,以及在各种情况下需要考虑的要点。 此时,我们正在对来自控制器层的服务层调用使用Java Spring Boot Hibernate高效事务管理,java,spring,hibernate,spring-boot,spring-transactions,Java,Spring,Hibernate,Spring Boot,Spring Transactions,在与Hibernate JPA集成的spring引导应用程序中。什么是不同的、最有效的事务管理方法,以及在各种情况下需要考虑的要点。 此时,我们正在对来自控制器层的服务层调用使用@Transactional注释;服务层因此执行各种读/写DAO调用。具有@Transactional的DAO方法 在必须直截了当且基本的场景中,当我们在单个服务层调用中对单个实体进行操作,并且希望将完整的操作集封装在单个事务中时,这对我们很有用 但是,如果我们希望根据具体情况采取不同的行为,该怎么办;例如,如果我们在服
@Transactional
注释;服务层因此执行各种读/写DAO调用。具有@Transactional
的DAO方法
在必须直截了当且基本的场景中,当我们在单个服务层调用中对单个实体进行操作,并且希望将完整的操作集封装在单个事务中时,这对我们很有用
但是,如果我们希望根据具体情况采取不同的行为,该怎么办;例如,如果我们在服务层调用中有一个在一组实体上运行的循环,尽管我们希望每个实体上的操作都是事务性的,但是如果我们不希望整个循环成为单个事务。或者,如果在对特定实体进行操作时,需要作为工作流的一部分执行多个操作,则这些工作流的子集可能希望在子集中出现异常/错误情况时对之前执行的操作没有影响
我知道可能有很多不同的方法来实现这一点,但我一直在寻找关于最佳、最高效和有效方法的线索
提前谢谢
如果我们有一个循环在服务中的一组实体上运行
层调用,尽管我们希望每个实体上的操作
交易性
在事务方法中的非事务和流程交互项中迭代,或在@transactional
中的事务和流程中与传播交互。需要\u NEW
最后一个结果是,自己处理事务
或者,如果对特定实体进行操作,则需要执行多个操作
要作为工作流的一部分执行,这些工作流的子集可以
希望对执行的操作没有影响
在子集中出现异常/错误情况时,在它们之前
典型的长时间运行事务
最好的办法是避免这种情况——例如分多个步骤创建合同草案——并在最后将该合同序列化为适当的实体,并将其保存在单个事务中