如何在hql上使用'group by'?

时间:2013-02-22 13:47:58

标签: java hibernate hql native

我有一个原生查询,我需要更改为HQL。

原始查询是:

SELECT COUNT(DISTINCT `table`.`id`) FROM `database`.`table` WHERE
(`table`.`date`" " BETWEEN '" + year + "-01-01 00:00:00' AND '" + year
+ "-12-31 23:59:59') AND `table`.`box` NOT LIKE '' GROUP BY MONTH(`table`.`date`)";

我尝试过类似的事情:

StringBuilder hql = new StringBuilder(); 
hql.append(" select count(distinct table.id)"); 
hql.append(" from Table table");
hql.append(" where table.date between '?-01-01 00:00:00' and '?-12-31 23:59:59'");
hql.append(" and table.box not like ''"); 
hql.append("group by month (table.date)"); 
query.setParameter(1, Integer.toString(year)); 
query.setParameter(2, Integer.toString(year));

其中year是作为参数传递给方法的int。

生成的查询是:

Hibernate: select count(distinct table0_.id) as col_0_0_ from table table0_ where (table0_.date between '2013-01-01 00:00:00' and '2013-12-31 23:59:59') and (table0_.box not like '') group by month(table0_.date)

我的问题是:使用本机查询,我得到一个值并使用hql我在第2个月(2月)得到另一个。对于第1个月(1月),结果是相同的。

我在这里缺少什么?

提前致谢,

gtludwig

1 个答案:

答案 0 :(得分:0)

它们似乎是相同的查询,没有我的架构资格。你不是在不同的实例中运行它们吗?比如,一个在'数据库'中,另一个指向另一个加载了类似数据的基础?