簡體   English   中英

如何在 JPA 規范中按字段區分計數查詢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM