JPA Spring 存储库过滤多个参数

JPA Spring repository filtering multiple parameters

我正在使用如下 Spring 存储库以便按日期范围过滤

public interface CustomerRepo extends CrudRepository<Customer, Long> {

    public List<Customer> findByCreatedBetween(LocalDate start, LocalDate end);
}

它非常简单而且工作正常,但现在我需要扩展我的休息服务以考虑其他过滤条件,例如排序或未排序,或按城市和国家/地区过滤。调用服务时,可能会设置一些参数,而另一些则不会。当然,我无法创建像 findByCreatedBetween 这样的方法来考虑所有可能的数据组合。处理这种情况的最佳方法是什么?

谢谢!

看看这个post:

http://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-four-jpa-criteria-queries/

您还可以实现您的存储库 "the old way",即将 entityManager 注入您的存储库并创建一个接受自定义条件对象的 findByCriteria 方法。在这里找到标准 API 文档:https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/querycriteria.html

标准 API 的另一种替代方法是使用 JPQL,您可以根据相同的标准创建动态查询字符串。 JPQL 参考:http://docs.oracle.com/javaee/6/tutorial/doc/bnbtg.html

一个可能的解决方案是使用 querydslpredicates

有一个 post 准确描述了使用 Spring 数据和 Querydsl 为 REST API 构建查询语言的一些场景。 tutorial

这里 there 也是关于 querydsl 和谓词的非常简短的描述(第 8 步灵活谓词执行)

他描述了这个场景:

Requirement: “As a user, I want to search for customers by first name, last name, email address and any combination of them”