2013-02-22 153 views
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

+1

您是否啓用了hibernate SQL生成日誌記錄來查看它是在生成什麼? (logger = org.hibernate.SQL) – 2013-02-22 13:55:25

+0

感謝您的建議,我編輯了原始問題以顯示此輸出。 – gtludwig 2013-02-22 14:34:03

+0

他們似乎是對我沒有模式限制的同一個查詢。你不是在不同的實例中運行它們嗎?就像一個在'數據庫'中,另一個指向另一個基地,加載了類似的數據? – 2013-02-22 15:42:04

回答

0

他們似乎沒有架構資格給我相同的查詢。你不是在不同的實例中運行它們嗎?就像一個在'數據庫'中,另一個指向另一個基地,加載了類似的數據?