首页 > 解决方案 > 使用 Spring data jpa 在运行时构建查询

问题描述

我正在使用这样的标准构建器在运行时构建查询。

通过几个因素过滤过滤器对象:开始日期和结束日期之间的日期,字符串字段匹配集合中的字符串之一等。

Predicate[] predicates = buildPredicates(filter, criteriaBuilder, root);
criteriaQuery.select(root).where(predicates);

TypedQuery<MonitorStatusHistory> query = entityManager.createQuery(criteriaQuery);

if (filter.getPage() != null && filter.getSize() != null) {
    query
           .setFirstResult(filter.getPage() * filter.getSize())
           .setMaxResults(filter.getSize());
}

return query.getResultList();

如何使用 JPA Repository 中的 spring data jpa 工具实现相同的目标?

我需要支持像这样的查询

SELECT * FROM obj WHERE obj.date > filter.startDate and 
obj.date < filter.finishDate and obj.num=12 or obj.num=32

假设过滤器类具有以下属性:

private Set<Integers> allowedNums; (allowed values for obj.num)
private ZonedDateTime startDate; (obj.date > this)
private ZonedDateTime finishDate; (obj.date < this)
private Integer page; (pagination page)
private Integer size; (pagination objs per page)

标签: javaspring-data-jpa

解决方案


您可以为此提供一个简单的解决方案,也可以提供一个复杂的解决方案。不幸的是,在这方面提供解决方案的时间太长,我对后者有经验,这绝对有效。


推荐阅读