2008-12-16 4 views
2

Je suis en train de coder la requête HQL suivante en utilisant l'API Critères:Comment un écrire une requête Critères jointures multiples impliqués

var userList = _session 
       .CreateQuery("select u from User u where u.Role.ID=3 and u.Customer.ID=:cID") 
       .SetInt32("cID", 1) 
       .List<User>(); 

(3 objets NHibernate: l'utilisateur (ID, nom, le rôle, le client), Rôle (ID, nom) et le client (ID, nom)

J'essayé ce qui suit, mais cela ne fonctionne pas parce que NHibernate essaie de trouver un client associé à un rôle.

var userList = _session 
      .CreateCriteria(typeof(User)) 
      .CreateCriteria("Role") 
      .Add(Restrictions.Eq("ID", 3)) 
      .CreateCriteria("Customer") 
      .Add(Restrictions.Eq("ID", 1)) 
      .List<User>(); 

Tous d'une autre manière (ça marche!) de le faire?

Répondre

4

Vous pouvez utiliser alias

var userList = _session 
     .CreateCriteria(typeof(User), "u") 
     .CreateAlias("u.Role", "r") 
     .Add(Restrictions.Eq("r.ID", 3)) 
     .CreateAlias("u.Customer", "c") 
     .Add(Restrictions.Eq("c.ID", 1)) 
     .List<User>(); 

Hope it helps

+0

brillant! Merci. – bounav

Questions connexes