将Spring Data查询构建器与Spring Data JPA规范相结合?

时间:2015-02-10 21:56:56

标签: jpa spring-data specifications query-builder

Spring Data允许您在存储库接口中声明类似findByLastname()的方法,并自动为您生成方法名称中的查询。

是否有可能以某种方式让这些自动生成的查询也接受规范,以便在数据返回之前对数据进行额外限制?

这样,我可以调用findByLastname(“Ted”,isGovernmentWorker()),它会找到所有姓氏为Ted AND且满足isGovernmentWorker()规范的用户。

我需要这个,因为我想要Spring Data 提供的自动查询创建,因为我仍然需要能够在运行时应用任意规范。

2 个答案:

答案 0 :(得分:4)

没有这样的功能。规格只能应用于JpaSpecificationExecutor操作。

<强>更新 数据访问操作由代理生成。因此,如果我们想在单个SELECT调用中对操作进行分组(如在findByName + Criteria中),则代理必须理解并支持这种用法;它没有。

使用规范API时的预期用途对于您的情况看起来像这样:

findAll(Specifications.where(hasLastName("Ted")).and(isGovernmentWorker())

答案 1 :(得分:0)

Spring数据允许您实现自定义存储库并使用规范或QueryDSL。

请参阅this文章。

最后,您将有一个YourCustomerRepository和适当的YourRepositoryImpl实施,您将在其中放置findByLastname("Ted", isGovernmentWorker())方法。 然后YourRepository应扩展YourCustomerRepository接口。