锁定老帖子 主题:Hiberante 查询分页问题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-28
关注Javaeye好久时间了,从来都没有发表过贴子,这次遇到一个问题,想跟圈子里的朋友交流一下! 我在用Hibernate进行分页处理时,通常会用到两条HQL的语句: 1、统计结果集的总数量:select count(*) as b from User as u 2、查询结果:from User as u
第一条HQL语句通常可以通过第二条HQL自动生成,这样就可以将一般分页的数据访问进行封装起来,大至情况如下: public Page pagedQuery(String hql, int pageNo, int pageSize, Object... values){ ...... List countlist = this.find(counthql, values); int totalCount = ((Long) countlist.get(0)).intValue(); if (totalCount < 1) return new Page(); // 实际查询返回分页对象 int startIndex = Page.getStartOfPage(pageNo, pageSize); Query query = createQuery(resulthql, values); //新加入设置查询缓存 query.setCacheable(true); List list = query.setFirstResult(startIndex).setMaxResults(pageSize) .list(); return new Page(startIndex, totalCount, pageSize, list); }
上边的封装在一般的情况下是很好用的,但最情我的同事有一个需求要:对数据分组后再进行分页。 ID LOGIN_ID PASSWORD STATUS ------- --------------- ----------------------- 5 admin4 admin4 2 3 admin3 admin3 2 2 admin2 admin2 1 1 admin1 admin1 1 9 admin8 admin8 4 7 admin6 admin6 3 6 admin5 admin5 3 8 admin7 admin7 3 4 admin 21232F297A5 1
原HQL是: select u.status,count(u.id) from User as u group by u.status order by count(u.id) desc 自动处理后的统计数量的HQL: select count(*) as b from User as u group by u.status
由于自动生成统计数量的HQL本意是查询出分组后的结果集量数: B ---------- 9
但是查询结果为 B ---------- 3 3 2 1
原因就是自动生成统计数量的HQL中的Count(*)计数是针对分组出现的。 select count(*) as b from SYS_USERS u group by u.status; select count(*) as c from (select count(*) as b from SYS_UserS u group by u.status) d ; C ---------- 4 于是我改变自动生成的数量统计HQL方法,想通过如下的方式实现 select u.status,count(u.id) from User as u group by u.status order by count(u.id) desc select count(c.status) as b from (select u.status,count(u.id) from User as u group by u.status) as c
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2038 次