NHibernate HQL - Присоединение - PullRequest
2 голосов
/ 24 июня 2011

Я хочу сделать простое объединение, просто сравнив идентификаторы в двух таблицах.

У меня есть таблица групп, содержащая;

  • ID
  • Имя
  • и т. Д.

И у меня есть моя таблица GroupMap, содержащая;

  • ID
  • GroupID
  • ItemID

Мой запрос принимает GroupMap.ItemID и предназначен для возврата списка групп, к которым принадлежит itemID, в SQL я бы это сделал;

select Group.* from Group, GroupMap Where GroupMap.ItemID = '527' and Group.ID = GroupMap.GroupID;

Thisвозвращает то, что мне нужно, я просто не могу воспроизвести это в HQL, я думал, что это было бы довольно тривиально.

Спасибо, Джеймс

Ответы [ 2 ]

8 голосов
/ 24 июня 2011

Вы можете использовать тэта-соединение в hql

select g from Group g, GroupMap m Where m.ItemID = '527' and g.ID = m.GroupID
3 голосов
/ 24 июня 2011

С HQL вы мыслите не с точки зрения таблиц и отношений между этими таблицами, а с точки зрения сущностей и ассоциаций между этими сущностями.

Итак, если у вас есть классы Group и GroupMap (которые вы сопоставили с таблицами БД), вам придется написать свой HQL примерно так:

from Group as g inner join g.Maps as m where  m.ItemID = '527'

То есть, предположим, что ваша группа имеет набор сущностей GroupMap ...

...