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:
您还可以实现您的存储库 "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
一个可能的解决方案是使用 querydsl
和 predicates
。
有一个 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”
我正在使用如下 Spring 存储库以便按日期范围过滤
public interface CustomerRepo extends CrudRepository<Customer, Long> {
public List<Customer> findByCreatedBetween(LocalDate start, LocalDate end);
}
它非常简单而且工作正常,但现在我需要扩展我的休息服务以考虑其他过滤条件,例如排序或未排序,或按城市和国家/地区过滤。调用服务时,可能会设置一些参数,而另一些则不会。当然,我无法创建像 findByCreatedBetween 这样的方法来考虑所有可能的数据组合。处理这种情况的最佳方法是什么?
谢谢!
看看这个post:
您还可以实现您的存储库 "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
一个可能的解决方案是使用 querydsl
和 predicates
。
有一个 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”