HQL: использование элементов () на объектах - PullRequest
4 голосов
/ 21 июля 2011

скажем, у меня есть база данных с двумя таблицами: классы и студенты.Каждая таблица содержит метаданные по соответствующей теме.Например, классы содержат поля «classid», «name» и «room_number», а студенты содержат поля «name», «classid», «age» и «height» (например, студент может быть только в одном классе).

Что если я захочу написать HQL-запрос, чтобы получить все классы, в которые входят ученики с именами «Джо», «Боб» и «Фред»?Если бы студенты содержали только «classid» и «name», я думаю, что я мог бы написать следующее на HQL.

from Classes as class where
  'Joe' in elements(class.students) and
  'Bob' in elements(class.students) and
  'Fred' in elements(class.students)

Тем не менее, студенты в этом случае являются объектом.Нужно ли выполнять соединения явно?

from Classes as class
  join class.students as s1
  join class.students as s2
  join class.students as s2
where
  s1.name = 'Joe'
  s2.name = 'Bob'
  s3.name = 'Fred'

Я полагаю, что использование 'Fred' in elements также выполняет эти объединения, но писать гораздо компактнее!Или есть лучший способ сделать это вообще?

1 Ответ

7 голосов
/ 22 июля 2011

Используйте дополнительный выбор:

from Classes c 
where c.classid in(
      select s.classid from students s where s.name in('Joe', 'Bob', 'Fred')
   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...