Spring数据jpa @transactional

liv*_*ves 10 spring spring-data spring-data-jpa

以下是我的申请流程

控制器 - 服务 - 存储库

在服务层,我们有@Transactional注释我们也有jpa:repository配置,我们指定实体管理器和txn管理器.

我怀疑是否jpa:repositories认为考虑了指定的txn管理器,并且没有@Transactional在服务层指定的影响.例如:服务层@Transactional可以映射到自定义txn管理器,其中由服务调用的存储库可以具有不同的txn管理器.在那种情况下,它不会产生问题吗?

有人澄清@Transactional我们在使用jpa存储库时是否需要放在服务层?

Ala*_*Hay 20

请参阅Spring Data Reference的2.3节:

http://docs.spring.io/spring-data/jpa/docs/1.0.0.M1/reference/html/#transactions

默认情况下,存储库中的CRUD方法是事务性的.虽然可以根据需要配置这些事务,但正如上面的注释中所建议的那样,事务通常是在服务层指定事务,在这种情况下:

由于外部事务配置确定使用的实际配置,因此将忽略存储库中的事务配置.

因此,在回答您的问题时,无论Spring Data事务管理是什么,都可以(并且应该)在服务级别指定事务.

  • 我观察到存储库中的事务拦截器不使用由服务层启动的事务管理器。在存储库代理处,执行搜索以通过名称“transactionManager”识别一个正在使用的 bean。如果我们希望 spring jpa 数据成为服务层启动的事务的一部分,是否有任何设置要做 (2认同)