消息关闭
    暂无新消息!

hibernate 关于group by的使用问题

问题作者 : Monica2017-08-31发布
Criteria criteria= session.createCriteria(Student.class, "student");
 criteria.setProjection(Projections.groupProperty("name"));
list result = criteria.list;
如上代码,我发现返回的result是name的集合,而我希望的student的集合,如何能实现呢,也就是说我希望hiernate执行的sql语句为select * from student group by name,但是hibernate 发送的是select name from student group by name这个语句,求高手解答?如果说用原生sql语句的或者HQL的,可以忽略回答。

5个回答

︿ 2
最近需要在界面实现用户登录统计功能,实现在某个时间段,登录人数范围 ,最后登录时间 查询出相应的记录

用到了group by 和having

hql语句如下,

Object[] pramas ={ timeBegin ,timeEnd,mincount ,maxcount};
   return syslogDao.findForPage("select username ,count(id) , max(createtime) from  Syslog " +
     " where  createtime > ? and createtime < ? " +
     "group by username having count(id) > ? and count(id) < ?", pramas ,pageSize ,page);
 

前台使用struts2标签取值,需要注意定义id="list"  

<s:iterator value="pageBean.list" status ="index" id="list">

 用户名: <s:property value="#list[0]"/>
 
登录次数:<s:property value="#list[1]"/>
 最后登录时间: <s:date name="#list[2]" format="yyyy-MM-dd HH:mm:ss"/>
  </s:iterator>
︿ 1
不好意思,楼上的回答跟我的问题不一样哦,我要的是group by而不是order by
︿ 0
就是按name排序咯!~
如果是排序 我知道哟!
废话不多说 直接上代码:(我是用Spring管理hibernate的)
 //查询不分页
    DetachedCriteria cri =DetachedCriteria.forClass(Student.class,"s");
        cri.addOrder(Order.desc("s.name"));//desc和asc就不解释咯!~
        List<Student> stu=  super.getHibernateTemplate().findByCriteria(cri);
我就是这样排序的咯!~纯hibernate应该一样的 除了获取crteria和查询结果有一点点差别。
添加条件是一样的
试试咯
有用给分啊