0

DAO クラスを介してデータを取得するために 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() 関数を単純な avg(user.age) に置き換えると、正常に機能するため、クラス マッピングが正常に機能しているように見えます。上記のエラーが表示されますが、hql クエリが適切ではないことを通知します。どうすれば修正できるかわかりません。前もって感謝します :)

よろしくお願いします、
シャリク

4

2 に答える 2

1

HQL と SQL を組み合わせています

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

これらのパラメーターを日付引数として渡します。

于 2010-09-28T13:01:39.807 に答える
0

avg を 2 回使用する必要はありません。正しい 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

于 2010-09-29T15:42:20.423 に答える