【发布时间】:2013-11-12 01:24:00
【问题描述】:
下面是我的申请流程
控制器 - 服务 - 存储库
在服务层我们有@Transactional注解
我们还有jpa:repository 配置,我们在其中指定实体管理器和txn 管理器。
我的怀疑是我觉得jpa:repositories中指定的txn manager被考虑了,在服务层指定@Transactional没有影响。
例如:服务层@Transactional 可以映射到自定义 txn 管理器,因为服务调用的存储库可能有不同的 txn 管理器。那样会不会有问题?
有人可以澄清一下,当我们使用 jpa 存储库时,我们是否需要将 @Transactional 放在服务层?
【问题讨论】:
-
事务不能在 DAO 层划分:单个工作单元通常会使用多个 DAO,并由单个事务服务方法进行编排。既然你只想要一个,为什么还要定义 2 个不同的事务管理器?
-
是的...因为当您进行多个数据库调用时,您需要一个事务而不是多个事务。因此,您需要在服务级别启动事务。
-
同意。当前实现中存在设计问题。该服务调用连接到两个不同模式的存储库(这些是纯选择查询,而不是 JTA)。这就是 jpa 存储库配置不同实体管理器工厂和不同 txn 管理器的原因。
标签: spring spring-data spring-data-jpa