【问题标题】:JPA Spring repository filtering multiple parametersJPA Spring存储库过滤多个参数
【发布时间】:2016-07-28 20:50:50
【问题描述】:

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

public interface CustomerRepo extends CrudRepository<Customer, Long> {

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

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

谢谢!

【问题讨论】:

    标签: spring hibernate spring-mvc spring-data spring-data-jpa


    【解决方案1】:

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

    有一篇文章准确描述了使用 Spring Data 和 Querydsl 为 REST API 构建查询语言的一些场景。 tutorial

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

    他描述了这个场景:

    要求:“作为用户,我想按名字搜索客户, 姓氏、电子邮件地址任意组合

    【讨论】:

    • 感谢分享。我在那个网址上看不到任何幻灯片或演示文稿,“第 8 步灵活谓词执行”是什么意思?
    • @BlackBishop 是的,没有幻灯片,但他在代码中记录了这些步骤。
    【解决方案2】:

    看看这篇文章:

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

    您还可以“以旧方式”实现您的存储库,即将 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

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      相关资源
      最近更新 更多