2013-06-11 3 views
1

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

select count(T) from (
    select inscription, max(wrd_step) as max 
    from table aa 
    where rd_context = ? 
    group by inscription 
) as T 
where T.max = ? 

Ошибка:

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: (near line 1, column 21 [select count(T) from(select inscription, max(wrd_step) from table aa where rd_context = ? group by inscription) as T where T.max = ?] 

Благодаря

EDIT:

Запрос в HQL:

SELECT count(distinct inscription) 
FROM Entity 
WHERE inscription in (
    select distinct inscription 
    from Entity 
    where rd_context = ? 
    group by inscription 
    having max(wrd_step) = ? 
) 
+0

выберите кол (T.inscription) форма (...) как T, где T.max =? –

+1

Для начала в HQL вам не следует запрашивать таблицы, вместо этого вы используете сущности и пути между ассоциациями. Это влияет на то, как вы структурируете свои запросы. Начните с чтения [Chapter 16 - HQL] (http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch16.html) [Справочного руководства по базовому гибернату] (http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/). Если вы не можете найти способ перевести исходный запрос, в качестве последнего средства вы можете вернуться к [Native SQL] (http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/ html/ch18.html) и или отображение объектов в представлениях базы данных. –

+0

Да, извините, «таблица» на самом деле является сущностью. Но спасибо за дополнительную информацию. – kinaesthesia

ответ

1

Hibernate документация говорится:

Обратите внимание, что HQL подзапросы могут произойти только в избранных или где положениях.

http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#queryhql-subqueries

Но если предположить, table это отображается объект (является его?), Вы можете сделать это (не проверено):

select count(aa) 
from table aa 
where rd_context = :param1 
group by inscription 
having max(wrd_step) = :param2 
+0

Спасибо, что мне очень помогает! Ваш запрос нуждается в небольшом преобразовании, чтобы быть хорошим. Точный запрос находится в моем первом сообщении, см. Edit. – kinaesthesia

Смежные вопросы