Was ist die HQL-Äquivalent von dieser SQL
-
05-07-2019 - |
Frage
Der Versuch, ein wenig komplexe Abfrage zu tun, und dachte, dass HQL würde für den Job besser sein. Mit 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 '?%'
Ich glaube, ich könnte auch einfach die SQL verwenden als auch (?), Aber nicht sicher, ob wirklich, wie meine Objekte zu laden, bis auf diese Weise.
Lösung
Es würde davon abhängen, was Ihre Einheiten sind und was die primäre Aufgabe, die Sie interessieren ist. Sie scheinen sie alle statt nur eine Einheit zu ziehen. Ich werde Gruppe zu übernehmen, um die Einheit aus diesem Beispiel
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 '?%'
Das sollte Ihnen den Start. Aber mit aus Ihrer Struktur zu wissen, ich bin ein Schuss im Dunkeln nehmen.
Andere Tipps
Wenn Sie many-to-many-Verbindung (User2Group Tabelle) haben, sollten Sie von ihm beginnen und machen alle auf diesem Tisch verbindet. Wenn Sie richtige Zuordnungen haben, unter der Abfrage wie ein Zauber funktioniert.
from User2Group as ug
join ug.User as u
join ug.Group as g
where u.Id = :userId and g.Activity.Lineage like '?%'