2010-09-28 160 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