2009-06-04 12 views
0

En HQL je peux faire quelque chose comme ceci:La sélection d'une entité jointe à un ICriteria dans NHibernate

select roleHeldByOwner.TargetPerson 
from Person roleOwner 
join roleOwner.RolesOnPeople roleHeldByOwner 
where roleOwner.Id = :roleOwnerId 

Comment puis-je obtenir la même chose dans une requête de critères? Sélectionnant spécifiquement quelque chose qui n'est pas la première entité de la clause from.

Répondre

1

Vous pouvez joindre en créant des sous-critères et sélectionner des résultats scalaires avec des projections. Votre requête Criteria pourrait ressembler à:

session.CreateCriteria(typeof(Person)) 
    .Add(Restrictions.Eq("Id", roleOwnerId)) 
    .SetProjection(Projections.Property("TargetPerson")) 
    .CreateCriteria("RolesOnPeople", JoinType.InnerJoin) // Or LeftOuterJoin, etc. 
    .List(); 

Si vous avez besoin de plusieurs projections, utilisez un ProjectionList comme:

.SetProjection(Projections.ProjectionList() 
    .Add(Projections.Property("...", ...)) 
    .Add(...) 
    ... 
) 

Je ne suis pas sûr de ce que votre domaine ressemble ou ce que vous essayez de sortir de la requête de sorte que ce qui précède peut ne pas être exact. Cependant, ce devrait être ce dont vous avez besoin pour commencer.

+0

Super, merci Stuart – mattcole

Questions connexes