Проблема с использованием вложенной агрегатной функции avg (..) в hibernate hql - PullRequest
0 голосов
/ 28 сентября 2010

Я использую HQL для получения данных через класс DAO, но он выдает ошибку, указанную ниже:

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

Ниже мой Hql Query:

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 () на простой avg (user.age) для тестирования, он будет работать нормально, поэтому кажется, что сопоставления классов работают нормально. Хотя я получаю ошибку, как указано выше, которая сообщает, что запрос hql не является правильным. Я не уверен, как я могу это исправить. Заранее спасибо :)

Спасибо и всего наилучшего,
Shariq

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

Вы комбинируете HQL с SQL

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

передать эти параметры в качестве аргументов даты.

0 голосов
/ 29 сентября 2010

Вам не нужно использовать avg дважды ... вот правильный 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

...