2009-09-11 9 views
0
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,%' 

Groupe> 1-n> User2Group < n-1 < utilisateur mn relationQuel est l'équivalent HQL de ce SQL?

activité> 1-n> Groupe 1-n

Essayer d'obtenir tous les groupes qu'un utilisateur n'a pas déjà ajouté à leur compte.

Ce que j'ai jusqu'à présent:

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); 

Ce qui m'a trébuché est le « ! Sur g.Id = ug.GroupID »

+0

Ce que je fini avec: groupes var = repository.SimpleQuery (début, spectacle, « du groupe en g où g.Type = ? et g.Activity.Lineage comme? et g.CreatedBy.Id! =? et g.Id pas dans (sélectionnez g.Id du groupe comme g joignez g.Users comme u où u.Id =?) ", Groupe. GroupType.Deleted, string.Format ("{0}%", lignage), currentUser.Id, currentUser.Id); – rball

Répondre

1

Il est un peu difficile quand je ne suis pas voir les entités et les applications, mais le

on g.Id != ug.GroupId 

partie pourrait probablement être exprimées dans HQL par

from Group as g where g.id not in (select u.group.id from User u where u.id = ?) 

Le reste de la clause where devrait être facile à ajouter.

esprit qu'il a été un moment que je travaillais avec HQL :-)

+0

J'essayais de ne pas entrer dans QueryBuilder d'Ayende et ça ne fonctionnait pas et je ne l'ai pas essayé en HQL. Je suis allé à SQL et je l'ai fait, mais je pense que votre HQL pourrait aussi fonctionner. Je vais essayer. Merci! – rball