Java 如何在hql上使用“分组依据”?

Java 如何在hql上使用“分组依据”?,java,hibernate,hql,native,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`)"; Hibe

我有一个本机查询需要更改为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`)";
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)
我试过这样的方法:

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

生成的查询是:

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`)";
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

在我看来,它们似乎是相同的查询,没有模式限定。您不是在不同的实例中运行它们吗?比如,一个在“数据库”中,另一个指向另一个加载了类似数据的数据库?

您是否启用了hibernate SQL生成日志,以查看它是否生成了什么?logger=org.hibernate.sql感谢您的建议,我已经编辑了原始问题以显示此输出。在我看来,它们似乎是相同的查询,没有模式限定。您不是在不同的实例中运行它们吗?比如,一个在“数据库”中,另一个指向另一个加载了类似数据的数据库?事实上,我似乎是在一个旧的测试数据库上进行测试,该数据库已经有一段时间没有更新了,因此存在差异。感谢您的时间和见解!然后把它作为答案贴出来:你可以,接受它:D