Hibernate 如何在JPA规范中使用总和聚合?
我试图编写一个规范来限制findAll存储库方法的返回值。 我可以添加groupBy和orderBy子句,但不能使用sum aggregate no errors,但无法在日志查询中查看聚合结果sum_TOTAL 这是我的密码: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
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查询,作为调试方式。您是否得到了此问题的答案,请在此处共享?我也面临同样的问题