2010-05-06 2 views
3

J'ai des difficultés à écrire un critère pour sélectionner toutes les entités avec des collections enfants vides ou des collections grand-enfant vides. Je peux les faire en tant que critères distincts, mais j'ai de la difficulté à les combiner en un seul critère.nHibernate Critères de sélection de toutes les entités avec des collections enfants vides

structure de classe:

public class Component 
    { 
     public IList<Version> Versions { get; set; } 
    } 

    public class Version 
    { 
     public IList<SubscribeEvent> SubscribedEvents { get; set; } 
     public IList<PublishEvent> PublishedEvent { get; set; } 
    } 

Cela ne fonctionne pas:

return session 
       .CreateCriteria<Component>("c") 
       .CreateCriteria("Versions", "v") 
       .Add(Restrictions.Or(Restrictions.IsEmpty("c.Versions"), Restrictions.And(Restrictions.IsEmpty("v.PublishedEvents"), 
                         Restrictions.IsEmpty("v.SubscribedEvents")))) 
       .SetCacheable(true); 
+0

Comment ça ne marche pas? Avez-vous une exception? Obtenez-vous des résultats inattendus? Aucun résultat? –

+0

quel est le sql généré? – dotjoe

+0

Il était retourné les mauvais résultats. – AwkwardCoder

Répondre

3

J'ai réussi à trouver une solution, pas sûr si c'est le meilleur (que je devrais acheter NH profileur)

return session 
      .CreateCriteria<Component>("c") 
      .CreateAlias("Versions", "v", JoinType.LeftOuterJoin) 
      .Add(Restrictions.Or(Restrictions.IsEmpty("c.Versions"), 
           Restrictions.And(Restrictions.IsEmpty("v.SubscribedEvents"), 
                Restrictions.IsEmpty("v.PublishedEvents")))) 
      .SetCacheable(true); 
Questions connexes