Hibernate 如何在JPA规范中使用总和聚合?

Hibernate 如何在JPA规范中使用总和聚合?,hibernate,jpa,spring-data,criteria-api,Hibernate,Jpa,Spring Data,Criteria Api,我试图编写一个规范来限制findAll存储库方法的返回值。 我可以添加groupBy和orderBy子句,但不能使用sum aggregate no errors,但无法在日志查询中查看聚合结果sum_TOTAL 这是我的密码: public static Specification<Commande> searchCommandWith(final Long dId, final Long gId, final Long pId, final LocalDate date1, fi

我试图编写一个规范来限制findAll存储库方法的返回值。 我可以添加groupBy和orderBy子句,但不能使用sum aggregate no errors,但无法在日志查询中查看聚合结果sum_TOTAL

这是我的密码:

public static Specification<Commande> searchCommandWith(final Long dId, final Long gId, final Long pId, final LocalDate date1, final LocalDate date2) {

    return new Specification<Commande>() {
        @Override
        public Predicate toPredicate(Root<Commande> commandeRoot, CriteriaQuery<?> query, CriteriaBuilder cb) {

            final List<Predicate> predicates = new ArrayList<Predicate>();

            if(dId!=null && dId > 0 ) {
                 Predicate p = cb.equal(commandeRoot.get("d").get("id"), dId);
                 predicates.add(p);
            }

            if(gId!=null && gId > 0 ) {
                Predicate p = cb.equal(commandeRoot.get("g").get("id"), gId);
                predicates.add(p);
            }

            if(pId!=null && pId > 0 ) {
                Predicate p = cb.equal(commandeRoot.get("p").get("id"), pId);
                predicates.add(predicate3);
            }

            //TODO
            if(date1!=null && date2!=null ) {
                Path<LocalDate> date = commandeRoot.<LocalDate>get("date");
                Predicate startPredicate = cb.greaterThanOrEqualTo(date, date1);                
                Predicate endPredicate = cb.or(cb.isNull(date), cb.lessThanOrEqualTo(date, date2));
                Predicate p= cb.and(startPredicate, endPredicate);

                predicates.add(p);
            }     

            return cb.and(predicates.toArray(new Predicate[predicates.size()]));
        }             
    };
}

public static Specification<Commande> searchCommandWith(                                                    final String sumCol, final String groupBy, final String orderBy, ..) {

    return new Specification<Commande>() {
        @Override
        public Predicate toPredicate(Root<Commande> commandeRoot, CriteriaQuery<?> query, CriteriaBuilder cb) {             

            if(sumCol!=null && !sumCol.isEmpty()){

                Expression sumExp = cb.sum(commandeRoot.<Double>get(sumCol));
                query.select(sumExp.alias("SUM_TOTAL"));

            }

            if(groupBy!=null && !groupBy.isEmpty()){
                query.groupBy(commandeRoot.get(groupBy));
            }

            if(orderBy!=null && !orderBy.isEmpty()){
                //query.orderBy(commandeRoot.get(orderBy));
                query.orderBy(cb.desc(commandeRoot.get(orderBy)));
            }


            return searchCommandWith(delegueId, grossisteId, pharmacieId, dateDebut, dateFin).toPredicate(commandeRoot, query, cb);
        }             
    };

在上述标准代码中,SUM的用法在哪里???aka CriteriaBuilder.sum这两行:表达式sumExp=cb.sumcomanderoot.getsumCol;query.selectsumExp.aliasSUM\u总计;建议你清理你的格式-难以阅读。我可以将cb.sum与我的JPA提供程序DataNucleus JPA完美结合使用,没有任何问题。只有您知道是否正在调用该行,并且您的JPA提供商可能有一种方式显示该条件查询的等效JPQL查询,作为调试方式。您是否得到了此问题的答案,请在此处共享?我也面临同样的问题