JPA Spring仓库过滤多个参数

10
我正在使用Spring存储库,以便按日期范围进行过滤。
public interface CustomerRepo extends CrudRepository<Customer, Long> {

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

这个任务非常简单且运作良好,但现在我需要扩展我的REST服务以考虑其他过滤条件,例如按排序或不排序、按城市和国家过滤等。调用服务时,有些参数可能被设置,而另一些则没有。当然,我不能创建像findByCreatedBetween这样的方法来考虑所有可能的数据组合。如何处理这种情况?

谢谢!

2个回答

3

看一下这篇文章:

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

您也可以采用“旧方法”来实现您的存储库,即将entityManager注入到您的repo中,并创建一个接受自定义条件对象的findByCriteria方法。在此处查找criteria API文档:https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/querycriteria.html

除了criteria API之外,另一种选择是使用JPQL,在其中从相同的条件创建动态查询字符串。JPQL参考资料:http://docs.oracle.com/javaee/6/tutorial/doc/bnbtg.html


1
一种可能的解决方案是使用querydslpredicates
有一篇文章详细描述了使用Spring Data和Querydsl构建REST API查询语言的一些场景tutorial
此外,这里there有一个非常简短的关于querydsl和predicates的描述(第8步:灵活的谓词执行)。
他描述了以下情况: 要求:“作为用户,我想通过名字、姓氏、电子邮件地址和它们的任意组合搜索客户”。

谢谢分享。我在该网址上看不到任何幻灯片或演示文稿,你说的“Step 8 Flexible Predicate execution”是什么意思? - BlackBishop
@BlackBishop 是的,没有幻灯片,但他在代码中记录了步骤。 - Patrick

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