看文档jpa有接口(CriteriaQuery)支持sum,count,max等统计函数的,见如下代码:
// Specification<AvgRateInveReport> spec=new Specification<AvgRateInveReport>(){
//
// @Override
// public Predicate toPredicate(Root<AvgRateInveReport> arg0, CriteriaQuery<?> arg1, CriteriaBuilder arg2)
// {
// Predicate pc = null;
//
// arg1.multiselect(arg2.sum(arg0.<Double>get("apply_num")),arg2.count(arg0.get("apply_num")),arg0.get("orgType").get("code_value"));
// //arg1.where(arg0)
// arg1.groupBy(arg0.get("orgType").get("code_value"));
//
// pc=arg1.getGroupRestriction();
//
// return pc;
//
// }};
//
// List<AvgRateInveReport> list=avgRateInveReportService.findAll(spec);
这段代码看起来显然是有问题的,返回的结果封装应该就不对,JPA使用的时间不是很长,果然还不熟悉.最后放弃。改用EntityManager提供的createQuery等接口直接写jpql来实现,虽然这样功能照样能实现,但与其他风格格格不入(代码里全是sql还要对where条件的判断)。 有没有熟手能指导下,谢谢!