Счетчик HQL из нескольких таблиц - PullRequest
2 голосов
/ 18 октября 2011

Я бы хотел запросить мою базу данных, используя HQL-запрос, чтобы получить общее количество строк, имеющих MY_DATE больше SOME_DATE.

До сих пор я придумал собственный запрос Oracle, чтобы получить этот результат, но я застрял при написании на HQL:

SELECT
    (
     SELECT COUNT(MY_DATE) 
     FROM Table1 
     WHERE MY_DATE >= TO_DATE('2011-09-07','yyyy-MM-dd') 
    ) 
    + 
    (
     SELECT COUNT(MY_DATE) 
     FROM Table2 
     WHERE MY_DATE >= TO_DATE('2011-09-07','yyyy-MM-dd')
    ) 
AS total

У меня на самом деле более двух таблиц, но у меня есть IllegalArgumentException (unexpected end of subtree).

Рабочий нативный Oracle в основном заканчивается на FROM dual.

Какой HQL-запрос я должен использовать, чтобы получить общее количество нужных мне строк?

1 Ответ

1 голос
/ 18 октября 2011

Прежде всего, если у вас есть рабочий SQL-запрос, почему бы просто не использовать его вместо того, чтобы пытаться перевести его на HQL? Поскольку вы в первую очередь возвращаете один скаляр, вам не нужно ничего, что предоставляет HQL (например, зависимые объекты и т. Д.)

Во-вторых, есть ли у вас двойное сопоставление в Hibernate? :-) Если нет, то как именно вы планируете это перевести?

При этом ошибка «неожиданный конец поддерева» обычно вызывается особенностями синтаксического анализатора AST в Hibernate. Обычно используемый обходной путь заключается в добавлении префикса к выражению '0 +':

select 0 + (
   ... nested select #1 ... 
       ) + (
   ... nested select #2 ... 
       ) as total
  from <from what exactly?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...