我想创建一个具有自定义行为的Spring Data JPA存储库,并使用Specification实现该自定义行为 . 我已经通过Spring Data JPA documentation for implementing custom behavior in a single repository设置了它,除了没有在自定义存储库中使用Spring Data Specification的示例 . 如果可能的话,如何做到这一点?
我没有看到一种方法将某些内容注入到需要规范的自定义实现中 . 我认为我会很棘手,并将存储库的CRUD存储库部分注入自定义部分,但这会导致循环实例化依赖 .
我没有使用QueryDSL . 谢谢 .
2 回答
我想灵感的主要来源可能是
SimpleJpaRepository
如何处理规格 . 要看的关键点是:SimpleJpaRepository.getQuery(…) - 它基本上创建了一个
CriteriaQuery
并使用JPARoot
引导选择 . 后者是否适用于您的用例已经取决于您 . 我认为前者肯定适用 .SimpleJpaRepository.applySpecificationToCriteria(…) - 它基本上使用
getQuery(…)
中产生的工件(即Root
和CriteriaQuery
)并将给定的Specification
应用于这些工件 .这不是使用规范,所以不确定它是否与您相关,但我能够注入自定义行为的一种方式如下,
一世 . 为通用父实体之后建模的实体类集创建通用接口 . 注意,这是可选的 . 在我的情况下,我需要这种层次结构,但没有必要
II . 将特定存储库从泛型(步骤1)和JPARepository扩展为
III . 在服务实现类中使用上面的存储库