表:U(name ,count,...)String sql = " select use.name,sum(use.count)  from U use where " + queryCondition+ " group by use.name"
上边的hql语句 可以得到一个List,现在我想得到List里总共有多少条数据(不是简单的List.size(),而是要通过hql查询得到)?  我的方法:在上边的hql 语句套了一层" select count(*) from (" +sql+ ")",但是报错,我想问题肯定是 from,hibernate的hql的from后边只能是对象吧,问题怎么解决呢?

解决方案 »

  1.   

    hibernate 不是支持sql写法的么
      

  2.   


     @SuppressWarnings("unchecked")
    public List<MovieBean> ReadMovie() {
    String hqlstr="SELECT  movie FROM MovieBean movie ";
    Query query =em.createQuery(hqlstr);
      // query.setParameter("username", username);
    List<MovieBean> result= query.getResultList();
    return result;
    }
      

  3.   


    select count(*) from U use where " + queryCondition+ " group by use.name"你在获取全部记录时候要处理下.
    就是把 " select use.name,sum(use.count) from U use where " + queryCondition+ " group by use.name" 这个hql中from 前面的全部去掉然后再加上select count(*) 到前面来组装成查询符合条件全部记录的 hql
      

  4.   

    不明白你到底要什么
    select sum(use.name) from U use .....可以获得总记录数
    select use.name,sum(use.count) from U use group by usr.name ...可以获得每个name 的count之和,这个返回的是List<Object []> hibernate标量查询,你查查吧
      

  5.   

    " select use.name,sum(use.count) from U use where " + queryCondition+ " group by use.name"
    得到的是一个结果集,我想知道这个结果集有多条数据? 不能直接计算结果的大小,要通过hql查询得出。
      

  6.   

    select count(use.name) nums, use.name,sum(use.count) from U use where " + queryCondition+ " group by use.name会使用sum就不会用count了?
      

  7.   

    结果不对
    我要的是结果集的数量,楼上的count(use.name)不正确,
      

  8.   

    这种统计分组的操作,用HQL来只会乱上加乱Hibernate擅长的是数据库O-R映射和实体操作,Sum,count,group by这些是数据库的专长,让hibernate来做效率是低得不能再低了参考一下这篇文章:
    http://www.ibm.com/developerworks/cn/java/j-lo-hibernate-jdbc/index.html?ca=drs-cn-0416
      

  9.   

    Query query = session.createSQLQuery(sql); 用这个可以直接调sql语句
      

  10.   

    用sql也行,主要是数据库没有表关系,写sql连接查询比较麻烦,呵呵
    现在我就是用sql,不知道用sql对数据库迁移有没有问题
      

  11.   

    hibernate确实有点不擅长 统计。但是我的问题还是得到解决了,结果很令人惊讶:
    sselect count(count(*)) from U use where " + queryCondition+ " group by use.name"
      

  12.   

    最终解决方案:select count(count(*)) from U use where " + queryCondition+ " group by use.name"