Spring Data JPA中是否可以将多个Repository注入到另一个Repository中
结论
这种写法语法上可以正常运行,但不符合Spring官方推荐的分层规范与设计原则。
具体原因
- @Repository注解的定位是对应单张表/单个域模型的数据访问层(DAO)组件,核心职责是完成单个持久化对象的增删改查操作,本身应该保持职责单一,不应该在DAO层内部依赖其他DAO组件,否则会造成持久层耦合过重、职责边界模糊。
- 你的实现场景里,
repositoryClass承担的是聚合多个Repository的查询逻辑、封装自定义SQL执行的功能,这一职责不属于DAO层的范畴,放在DAO层会违反单一职责原则。 - 额外风险:该写法会提升单元测试的复杂度,同时多个Repository的事务传播属性更容易出现配置错误,后续维护成本也会更高。
推荐改造方案
将repositoryClass上的@Repository注解替换为@Service,将它定位为业务逻辑层的通用查询组件,是更符合分层规范的实现:
@Service public class QueryService { @Autowired private Repository1 repo1; @Autowired private Repository2 repo2; // 你的自定义SQL执行逻辑 }
如果你确实需要扩展Spring Data JPA的基础Repository能力,也可以按照Spring Data JPA官方提供的「自定义Repository实现」的规范来开发,不要直接在DAO类中注入其他Repository。
内容的提问来源于stack exchange,提问作者Akhilesh Magdum
相关产品推荐
相关产品推荐

