1
我有一个本地查询,我需要更改为HQL。如何在hql上使用'group by'?
原来的查询是:
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));
如果今年是传递给方法参数作为一个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月)的结果是一样的。
我在这里错过了什么?
由于提前,
gtludwig
您是否启用了hibernate SQL生成日志记录来查看它是在生成什么? (logger = org.hibernate.SQL) – 2013-02-22 13:55:25
感谢您的建议,我编辑了原始问题以显示此输出。 – gtludwig 2013-02-22 14:34:03
他们似乎是对我没有模式限制的同一个查询。你不是在不同的实例中运行它们吗?就像一个在'数据库'中,另一个指向另一个基地,加载了类似的数据? – 2013-02-22 15:42:04