以下是我的申请流程
Controller - services - repository
在服务层,我们有@Transactional
注释
我们还有jpa:repository
配置,我们指定实体管理器和txn管理器。
我怀疑是否认为考虑了jpa:repositories
中指定的txn管理器,并且在服务层指定@Transactional
没有任何影响。
例如:服务层@Transactional
可以映射到自定义txn管理器,因为服务调用的存储库可能具有不同的txn管理器。在这种情况下,它不会产生问题吗?
当我们使用jpa存储库时,是否有人澄清我们是否需要将@Transactional
放在服务层?
答案 0 :(得分:19)
参见Spring Data Reference第2.3节:
http://docs.spring.io/spring-data/jpa/docs/1.0.0.M1/reference/html/#transactions
默认情况下,存储库中的CRUD方法是事务性的。虽然可以根据需要配置这些事务,但正如上面的注释中所建议的那样,事务通常是在服务层指定事务,在这种情况下:
存储库中的事务配置将被忽略 然后,外部事务配置确定实际的 使用
因此,在回答您的问题时,无论Spring Data事务管理是什么,都可以(并且应该)在服务级别指定事务。