Qual é o equivalente HQL desta SQL
-
05-07-2019 - |
Pergunta
Tentando fazer um pouco mais consulta complexa, e pensou que HQL seria melhor para o trabalho. Usando 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 '?%'
Eu acho que eu também poderia usar apenas o SQL, bem como (?), Mas não tenho certeza realmente como carregar os meus objetos dessa forma.
Solução
Isso depende de quais são suas entidades são e que o objeto principal o que importa é. Você parece estar puxando-os todos em vez de apenas uma entidade. Eu estou indo supor Group é a entidade a partir deste exemplo
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 '?%'
Isso deve começar. Mas sem saber a sua estrutura, estou tomando um tiro no escuro.
Outras dicas
Se você tem muitos-para-muitos relação (tabela User2Group) você deve começar a partir dele e fazer toda a junta nesta tabela. Se você tem mapeamentos corretos, a consulta a seguir vai funcionar como um encanto.
from User2Group as ug
join ug.User as u
join ug.Group as g
where u.Id = :userId and g.Activity.Lineage like '?%'