日期:2014-05-20  浏览次数:20620 次

hql 统计查询
表: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后边只能是对象吧,问题怎么解决呢?

------解决方案--------------------
hibernate 不是支持sql写法的么
------解决方案--------------------
Java code

 @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;
    }

------解决方案--------------------
[code=sql]
select count(*) from U use where " + queryCondition+ " group by use.name"

[/code]

你在获取全部记录时候要处理下.
就是把 " select use.name,sum(use.count) from U use where " + queryCondition+ " group by use.name" 这个hql中from 前面的全部去掉

然后再加上select count(*) 到前面来组装成查询符合条件全部记录的 hql
------解决方案--------------------
不明白你到底要什么
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标量查询,你查查吧
------解决方案--------------------
select count(use.name) nums, use.name,sum(use.count) from U use where " + queryCondition+ " group by use.name

会使用sum就不会用count了?
------解决方案--------------------
这种统计分组的操作,用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

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