下面是我的申请流程
Controller - 服务 - 存储库
在服务层我们有 @Transactional
注释
我们还有 jpa:repository
配置,我们在其中指定实体管理器和 txn 管理器。
我的怀疑是我觉得jpa:repositories
中指定的txn manager被考虑了,在服务层指定@Transactional
没有影响。
例如:服务层 @Transactional
可以映射到自定义 txn 管理器,因为服务调用的存储库可能有不同的 txn 管理器。那样会不会有问题?
有人可以澄清一下,当我们使用 jpa 存储库时,我们是否需要将 @Transactional
放在服务层?
最佳答案
参见 Spring Data Reference 的第 2.3 节:
http://docs.spring.io/spring-data/jpa/docs/1.0.0.M1/reference/html/#transactions
默认情况下,您的存储库上的 CRUD 方法是事务性的。虽然可以根据需要配置这些事务,但通常情况下,如上面评论中所建议的那样,事务是在服务层指定的,在这种情况下:
The transaction configuration at the repositories will be neglected then as the outer transaction configuration determines the actual one used.
因此,在回答您的问题时,可以(并且应该)在服务级别指定事务,而不管 Spring Data 事务管理如何。
关于 Spring 数据 jpa @transactional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19716673/