Вопрос

Попытка сделать немного более сложный запрос, и подумал, что HQL будет лучше для этой работы. Использование nHibernate.

SELECT * FROM [Group] g 
  INNER JOIN [User2Group] ug on g.Id = ug.GroupId
  INNER JOIN [User] u ON u.Id = ug.UserId
  INNER JOIN Activity a on g.ActivityId = a.Id
WHERE u.Id = ? AND a.Lineage LIKE '?%'

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

Это было полезно?

Решение

Это будет зависеть от того, какие у вас сущности и какой основной объект вам важен. Вы, кажется, тянете их всех вместо одной сущности. Я собираюсь предположить, что Группа является сущностью из этого примера

from MyApp.Entities.Group as g
join fetch g.Users as u
join fetch g.Activity as a
where u.Id = :userId and a.Lineage like '?%'

Это должно помочь вам начать. Но, зная вашу структуру, я делаю снимок в темноте.

Другие советы

Если у вас есть соединение «многие ко многим» (таблица User2Group), вам следует начать с него и выполнить все объединения в этой таблице. Если у вас правильные сопоставления, приведенный ниже запрос будет работать как шарм.

from User2Group as ug
join ug.User as u
join ug.Group as g
where u.Id = :userId and g.Activity.Lineage like '?%'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top