¿Cuál es el equivalente HQL de este SQL?
-
05-07-2019 - |
Pregunta
Intentando hacer una consulta un poco más compleja, y pensé que HQL sería mejor para el trabajo. Utilizando 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 '?%'
Supongo que también podría usar el SQL también (?), pero no estoy seguro de cómo cargar mis objetos de esa manera.
Solución
Dependería de cuáles sean sus entidades y de cuál sea el objeto principal que le importa. Pareces estar tirando de todos en lugar de una sola entidad. Voy a asumir que Grupo es la entidad de este ejemplo
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 '?%'
Eso debería ayudarte a empezar. Pero sin conocer su estructura, estoy tomando una foto en la oscuridad.
Otros consejos
Si tiene una conexión de muchos a muchos (tabla User2Group), debe comenzar desde ella y hacer todas las uniones en esta tabla. Si tiene las asignaciones correctas, la consulta a continuación funcionará como un encanto.
from User2Group as ug
join ug.User as u
join ug.Group as g
where u.Id = :userId and g.Activity.Lineage like '?%'