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

4
Spring Data允许您在存储库接口中声明像findByLastname()这样的方法,并自动为您从方法名称生成查询。但是否有可能让这些自动生成的查询也接受Specification,以便在返回数据之前对数据进行附加限制呢?这样,例如我可以调用findByLastname("Ted", isGovernmentWorker()),它将查找所有姓Ted且符合isGovernmentWorker()规范的用户。我需要这个功能是因为我想要Spring Data提供的自动化查询创建,同时仍然需要能够在运行时应用任意规范。
2个回答

4

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

更新 数据访问操作是由代理生成的。因此,如果我们想将操作(例如findByName + Criteria)分组到单个SELECT调用中,则代理必须了解和支持此类用法;但它不支持。

在使用规范API时,您的用例应如下所示:

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

好的。但是有没有一种方法可以模拟相同的事情呢?例如,您可以创建一个包装器来模拟findOne(规范s)中的findAll(规范s)。 - Michael Tontchev
Manish - 谢谢。是的,全面规范化确实有效 - 我只是希望我还能利用Spring Data具有的查询构建器功能。再次感谢! - Michael Tontchev

0

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

请参阅this文章。

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


这并没有回答我的问题。QueryDSL只是语法糖。我想要能够运行像findByLastname("Ted", isGovernmentWorker())这样的查询。你能告诉我需要使用什么语法吗?我不认为有这样的解决方案。 - Michael Tontchev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接