我有实现JPA Specification接口的Specification类:
EntityClassSpecification implements Specification<EntityClass>
我已经重写了toPredicate
方法,如下所示:
public Predicate toPredicate(Root<EntityClass> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
final Collection<Predicate> predicates = new ArrayList<>();
if (isNullOrEmpty(soilEntryCriteria.getField())) {
query.groupBy(root.get("field"));
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
问题是,当我将此规范用于findAll()时,它返回Page<EntityClass>
的结果集,并按field
分组,但是当我获得分页的总计数时,它将返回错误的计数,而不按field
分组。
我尝试使用.distinct(true)
,.countDistinct(root.get("field"))
并创建单独的计数查询,该查询返回Long值,但是每次jpql查询计数都不会改变,并且返回不正确的总值。
我认为是时候寻求帮助了。您能否提出任何建议,以提示我如何更改分页总数查询?
答案 0 :(得分:0)
我正在使用这种方法:
@Override
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb)
{
// Count Query?
if (query.getResultType().toString().contains("java.lang.Long")) {
root.join("<MyJoinEntity>");
} else {
root.fetch("<MyJoinEntity>");
}
...
}