2010-09-28 167 views
0

我使用HQL通過DAO類來獲取數據,但它拋出的錯誤如下陳述:問題使用嵌套AVG(..)在休眠HQL聚合函數

ERROR org.hibernate.hql.PARSER - <AST>:0:0: unexpected AST node: query 

下面是我的HQL查詢:

select new com.shaikh.dto.UserResult (user.userSurName, avg((select avg(v1.age) from com.shaikh.dto.UserResult v1 where v1.joinDate between to_date(:dayFirst, 'dd-Mon-yy') and to_date(:dayLast, 'dd-Mon-yy'))), avg(user.age)) from com.shaikh.dto.User user group by user.userSurName"; 

String [] paramNames = { "dayFirst", "dayLast" }; 
Object [] values = { firstDay,lastDay}; 
return getHibernateTemplate().findByNamedParam(queryString, paramNames, values); 

我正在使用Oracle 11g作爲數據庫。

如果我用簡單的avg(user.age)替換嵌套的avg()函數進行測試,它工作正常,所以看起來類映射工作正常。雖然我收到錯誤,通知hql查詢不正確。我不知道我該如何修復它。感謝提前:)

感謝&問候,
Shariq

回答

1

您正在使用SQL

to_date(:dayFirst, 'dd-Mon-yy') and to_date(:dayLast, 'dd-Mon-yy') 

結合HQL傳遞這些參數作爲日期參數。

+0

它是作爲傳遞日期數組命名值。這裏firstDay和lastDay是java.util.Date Object的對象[] values = {firstDay,lastDay}; – 2010-09-29 10:03:44

+0

所以你不需要通過oracle來強制這些值;)。順便說一句。在這個代碼中,也不可能說出那些值的類型。 – 2010-09-29 16:14:16

0

你並不需要使用平均的兩倍...這裏是正確的HQL:

select new com.shaikh.dto.UserResult (user.userSurName, (select avg(v1.age) from com.shaikh.dto.UserResult v1 where v1.joinDate between :dayFirst and :dayLast), avg(user.age)) from com.shaikh.dto.User user group by user.userSurName"; 

,並使用對象數組看到對象傳遞dayFirst和dayLast爲java.util.Date