¿Cuál es el equivalente HQL de este SQL?
-
05-07-2019 - |
Pregunta
SELECT *
FROM [Group] g
INNER JOIN User2Group ug
**on g.Id != ug.GroupId**
INNER JOIN [Activity] a
on a.Id = g.ActivityId
WHERE g.UserId != 2
AND a.Lineage like '0,1,%'
Grupo > 1-n & Gt; User2Group & Lt; n-1 < Usuario relación m-n
Actividad > 1-n & Gt; Grupo 1-n
Intentando obtener todos los grupos que un usuario aún no ha agregado a su cuenta.
Lo que tengo hasta ahora:
var groups = repository.SimpleQuery<Group>("from Group as g join fetch g.Users as u join fetch g.Activity as a where g.Type != ? and a.Lineage like ? and g.CreatedBy.Id != ?", Group.GroupType.Deleted, string.Format("{0}%", lineage), currentUser.Id);
Lo que me hizo tropezar es el " en g.Id ! = ug.GroupID "
Solución
Es un poco difícil cuando no veo las entidades y las asignaciones, pero el
on g.Id != ug.GroupId
La parte probablemente podría expresarse en HQL por
from Group as g where g.id not in (select u.group.id from User u where u.id = ?)
El resto de la cláusula where debería ser fácil de agregar.
Recuerda que ha pasado un tiempo desde que trabajé con HQL :-)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow