Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate, HQL, подзапросы


Автор: brejnev 24.12.2007, 11:29
Запрос делает следующее. Есть чувак - "person", у него есть история "QuestionnaireHistory". Для чувака может быть несколько записей в истории. У истории есть тип - QuestionnaireStatus и дата. Мне нужно выбрать для каждого чувака последнюю запись в истории и посчитать количество с групировкой по статусам. Некоторые условия убрал чтобы не загромождать пост.

Написал вот такой SQL-запрос:

Код

select count(persondata.f_status), tquestionnairestatus.fname
from (  select max(fdate), f_personaltask, f_status from tquestionnairehistory
        group by 2 desc
     ) as persondata
       left join tquestionnairestatus
       on persondata.f_status = tquestionnairestatus.fkey
group by 2


Работает.
Ничего особенного кроме того, что "select * from <подзапрос>".

Переделываю в HQL
Код

select count(PersonData.status), PesonData.name
from ( 
          select max(history.date) as date, history.personaltask.key as person, history.status as status,history.status.name as name 
from QuestionnaireHistory history  group by 2


не получется, ругается на синтаксис

Код

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 38 [select count(PersonData.status) from ( select max(history.date)........................


В мануале( Hibernate reference) встречаю такую строку:
Код

14.13. Subqueries
....
Note that HQL subqueries may occur only in the select or where clauses.

Нельзя получается вложенные запросы помещать во from.... Как быть?


 smile 

Автор: brejnev 24.12.2007, 12:15
Не стал сильно заморачиваться и сделал через native query. Интересно,на сколько это правильно мешать sql и hql

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)