Что такое HQL-эквивалент этого SQL
-
05-07-2019 - |
Вопрос
Попытка сделать немного более сложный запрос, и подумал, что 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 '?%'