我实际上正在使用不同的过滤器进行研究。
当我使用 JpaRepository 进行简单查询时,我发现 JpaSpecificationExecutor 可以使用 Criterias 进行动态查询。
我的问题是我需要使用 group by 和 count() 创建一个复杂的查询。 对于分组来说没问题,但我不知道如何覆盖“选择”部分来放置“计数”指令。
有人可以帮我吗?
我正在使用 spring 3.1.2 和 spring-jpa-data 1.0.3 这是我的代码:
return new Specification< Article >() {
@Override
public Predicate toPredicate(final Root<Article> root,
final CriteriaQuery<?> query, final CriteriaBuilder builder) {
//count ???
query.groupBy(root.get(Article_.id));
Predicate p = builder.and(builder.like(root.<String> get(Article_.title), "%" + title + "%"));
return p;
}
}
谢谢!
最佳答案
不幸的是,你不能使用 spring-data 规范来做到这一点。
您可以在此处了解为什么和如何在仍然使用 spring-data 的情况下执行此操作(有一个简单的查询仅返回一个字段): spring-data specifications - return list of ids instead of objects
要获取字段列表,您可以使用 JPA 元组。您可以在这里找到一个示例: JPA & Criteria API - Select only specific columns
简短版本:您需要创建一个自定义 spring-data 存储库,它将使用 CriteriaQuery<Tuple>
。
关于spring - Jpa规范执行器: complex queries with specifications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14204841/