Можно ли преобразовать этот SQL с подзапросом в SELECT в Hibernate 3.0.5 HQL? - PullRequest
1 голос
/ 04 января 2011

Можно ли преобразовать следующее в HQL 3.0.5, используя любой подход?Подзапросы, внешние соединения с предикатами и т. Д.?

SELECT c.case_id, 
       (SELECT MAX(a.begin_date)
          FROM assignment a
         WHERE a.case_id = c.case_id)  
  FROM case c

Отношение между регистром и присваиванием равно 1 для многих.Цель запроса - вернуть все случаи и их последнюю дату начала назначения, если таковая существует.

Мне трудно найти именно то, что поддерживает Hibernate 3.0.5, а что нет, но я видел признаки того, что он поддерживает только подзапросы в WHERE.

РЕДАКТИРОВАТЬ: если для данного случая не существует назначения, case_id должен все еще возвращаться, а возвращаемая дата начала назначения должна быть нулевой.

Ответы [ 2 ]

3 голосов
/ 04 января 2011

Во-первых, ваш SQL-запрос может быть переписан с JOIN и GROUP BY вместо подзапроса:

SELECT c.case_id, MAX(a.begin_date)
FROM case c LEFT JOIN assignment a ON a.case_id = c.case_id
GROUP BY c.case_id

В этой форме его можно легко преобразовать в HQL, что-то вроде этого (зависит от отображения):

SELECT c.id, MAX(a.beginDate)
FROM Case c LEFT JOIN c.assignments a
GROUP BY c.id
0 голосов
/ 26 января 2011

HQL поддерживает подвыборы при условии, что это есть в базовой БД [например,Oracle 10g].Как объяснено в этой статье .

...