Kep*_*nik 6 java hibernate jpa
我有实现 JPA 规范接口的规范类:
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()]));
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我将此规范用于 findAll() 时,它返回Page<EntityClass>结果集,按 分组field,但是当我获得分页的总计数时 - 它返回不正确的计数,而不是按 分组field。
我尝试使用.distinct(true),.countDistinct(root.get("field"))并创建单独的计数查询,该查询返回 Long 值,但每次 jpql 对计数的查询都不会更改,并返回不正确的总值。
我想是时候寻求帮助了。您能否建议我如何更改分页的总计数查询的任何提示?
小智 2
我正在使用这种方法:
@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>");
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1608 次 |
| 最近记录: |