坑点:
1.hql语句中sum()返回一个long值,所以如果定义的对象实体类字段为int型,则会报错。
2.要想日期直接用<>比较,必须保持日期格式,例如2014/01/01
代码:
Query query = this .getSession() .createQuery( "select hzmydCkpjsjJgmc,count(hzmydCkpjsjPjjg) as totalCommentCounts," + "sum(case when hzmydCkpjsjPjjg='非常满意' then 1 else 0 end) as muchSatiCounts," + "sum(case when hzmydCkpjsjPjjg='满意' then 1 else 0 end) as manuSatiCounts," + "sum(case when hzmydCkpjsjPjjg='未评' then 1 else 0 end) as autoSatiCounts," + "sum(case when hzmydCkpjsjPjjg='基本满意' then 1 else 0 end) as basicSatiCounts," + "sum(case when hzmydCkpjsjPjjg='不满意' then 1 else 0 end) as notSatiCounts " + " from HzmydCkpjsj " + "where hzmydCkpjsjJlrq>=:startTime and hzmydCkpjsjJlrq<=:endTime " + "group by hzmydCkpjsjJgmc") .setParameter("startTime", startTime) .setParameter("endTime", endTime); List<Object[]> list = query.list(); List<GroupHzmydCkpjsjByKs> resultList = new ArrayList<GroupHzmydCkpjsjByKs>(); for (Object[] obj : list) { GroupHzmydCkpjsjByKs gByKs = new GroupHzmydCkpjsjByKs(); gByKs.setTotalCommentCounts((Long) obj[1]); gByKs.setMuchSatiCounts((Long) obj[2]); gByKs.setManuSatiCounts((Long) obj[3]); gByKs.setAutoSatiCounts((Long) obj[4]); gByKs.setBasicSatiCounts((Long) obj[5]); gByKs.setNotSatiCounts((Long) obj[6]); gByKs.setHzmydCkpjsjJgmc(obj[0].toString()); resultList.add(gByKs); } return resultList;
当然,还有个简单的:
Query query = this .getSession() .createQuery( "select new com.fxfk.entity.GroupHzmydCkpjsjByKs(hzmydCkpjsjJgmc,count(hzmydCkpjsjPjjg) as totalCommentCounts," + "sum(case when hzmydCkpjsjPjjg='非常满意' then 1 else 0 end) as muchSatiCounts," + "sum(case when hzmydCkpjsjPjjg='满意' then 1 else 0 end) as manuSatiCounts," + "sum(case when hzmydCkpjsjPjjg='未评' then 1 else 0 end) as autoSatiCounts," + "sum(case when hzmydCkpjsjPjjg='基本满意' then 1 else 0 end) as basicSatiCounts," + "sum(case when hzmydCkpjsjPjjg='不满意' then 1 else 0 end) as notSatiCounts) " + " from HzmydCkpjsj " + "where hzmydCkpjsjJlrq>=:startTime and hzmydCkpjsjJlrq<=:endTime " + "group by hzmydCkpjsjJgmc") .setParameter("startTime", startTime) .setParameter("endTime", endTime); List<GroupHzmydCkpjsjByKs> resultList = query.list(); return resultList;