![](/img/trans.png)
[英]How to combine distinct and sort in spring data jpa specification query with joins
[英]How can I distinct count query by field in JPA specification?
我有 Specification class 實現了 JPA Specification interface: 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 查詢計數都沒有改變,並返回不正確的總值.
我認為是時候尋求幫助了。 您能否提出任何提示,我可以如何更改此總計數查詢以進行分頁?
我正在使用這種方法:
@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>");
}
...
}
Mb 好一點(基於@Rafael Gava 的回答):
private static boolean isCountQuery(CriteriaQuery<?> query) {
return query.getResultType().getAnnotation(Entity.class) == null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.