HQl эквивалент SQL-запроса - PullRequest
       3

HQl эквивалент SQL-запроса

0 голосов
/ 21 декабря 2010
String SQL_QUERY = "SELECT count(*) FROM (SELECT * FROM Url as U where U.pageType=" + 1 + " group  by U.pageId having count(U.pageId) = 1)";
query = session.createQuery(SQL_QUERY);

Я получаю сообщение об ошибке

org.hibernate.hql.ast.QuerySyntaxException: неожиданный токен: (возле строки 1, столбец 23 [SELECT count () FROM (SELECT * FROM Url as Uгде U.pageType = 2 группа по U.pageId с числом (U.pageId) = 1)]

Ответы [ 3 ]

0 голосов
/ 21 декабря 2010

Ваш запрос в порядке кода HQL.Обратите внимание на заглавные буквы для сущностей: например, url в вашем классе компонентов может быть Url.

В любом случае есть метод createSQLQuery(queryString) для запуска запроса на языке SQL.

0 голосов
/ 21 декабря 2010

В HQL нельзя использовать подзапросы в предложении FROM.

В этом конкретном случае (с having count(U.pageId) = 1) тот же результат должен быть получен с помощью следующего запроса (хотя я не уверен в производительности):

SELECT count(u) FROM Url u WHERE u.pageType = 2 AND
    1 = (SELECT count(uu) FROM Url uu WHERE u.pageId = uu.pageId)

Если это не подходит, вы можете использовать session.createSQLQuery().

0 голосов
/ 21 декабря 2010

Вы также можете использовать группирование по группам, наличию и подзапросам в hql.

Некоторые примеры:

текст ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...