Quel est l'équivalent HQL de ce SQL?
-
05-07-2019 - |
Question
Essayer de faire une requête un peu plus complexe et penser que HQL serait meilleur pour le travail. Utilisation de 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 '?%'
Je suppose que je pourrais aussi simplement utiliser le code SQL (?), mais je ne sais pas vraiment comment charger mes objets de cette façon.
La solution
Cela dépend de la nature de vos entités et de l’objet principal qui vous tient à cœur. Vous semblez les tirer tous au lieu d'une seule entité. Je vais supposer que le groupe est l'entité de cet exemple
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 '?%'
Cela devrait vous aider à démarrer. Mais sans connaître votre structure, je prends une photo dans le noir.
Autres conseils
Si vous avez une connexion plusieurs à plusieurs (table User2Group), vous devez commencer par cette connexion et effectuer toutes les jointures sur cette table. Si les mappages sont corrects, la requête ci-dessous fonctionnera comme un charme.
from User2Group as ug
join ug.User as u
join ug.Group as g
where u.Id = :userId and g.Activity.Lineage like '?%'