在与Hibernate JPA集成的spring boot应用程序中。事务管理的不同和最有效的方法是什么,以及在各种场景下需要考虑的关键点是什么。
此时,我们在来自控制器层的服务层调用中使用了@Transactional
注释;因此,服务层将执行各种读/写DAO调用。使用@Transactional
的DAO方法。
在必须直接和基本的场景中,这很好地服务于我们,其中我们在单个服务层调用中对单个实体进行操作,并且我们希望在单个事务中包装完整的操作集。
但是,如果我们想要根据情况不同的行为;例如,如果我们在服务层调用中有一个对一组实体进行操作的循环,虽然我们希望每个实体上的操作都是事务性的,但如果我们不希望整个循环是单个事务的话。或者,如果当在特定实体上操作时,需要将若干操作作为工作流的一部分来执行,则这些工作流的子集可能希望在子集中出现异常/错误的情况下不影响在它们之前执行的操作。
我知道有很多不同的方法可以实现这一点,但我一直在寻找最佳、最有效和最有效的方法的线索。
提前感谢!!
发布于 2018-08-12 14:39:57
如果我们在服务层调用中有一个对一组实体进行操作的循环,尽管我们希望每个实体上的操作都是事务性的,
在事务性方法中迭代非事务性和流程交互项,或使用Propagation.REQUIRES_NEW
在@Transactional
中交互事务性和流程
作为最后的结果,您自己处理事务。https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/transaction.html
或者,如果当在特定实体上操作时,需要将若干操作作为工作流的一部分来执行,则这些工作流的子集可能希望在子集中出现异常/错误的情况下不影响在它们之前执行的操作。
典型的长时间运行事务
最好的做法是避免这种情况--例如,在多个步骤中创建合同草案--并在最后将该合同序列化为适当的实体,并将其持久化到单个事务中。
https://stackoverflow.com/questions/51809797
复制