2010-04-28 9 views

Odpowiedz

15

Po prostu utworzę alias do kolekcji i doda ograniczenia.

var parentsWithKidName = session.CreateCriteria<Parent>() 
    .CreateAlias("Children", "c", JoinType.InnerJoin) 
    .Add(Restrictions.Eq("c.Name", childName)) 
    .SetResultTransformer(Transformers.DistinctRootEntity()) 
    .List<Parent>(); 

Spowodowałoby

select p.* 
from parent p 
inner join child c on /* however it's mapped? */ 
where c.Name = ? 

Transformator główny podmiot odrębny przetworzy zestaw wyników i usunąć zduplikowane rodziców. Nadal jednak natrafiają na drut.

0

Co zrobiłem było utworzyć kwerendę kryteria rodzaju dominującej, należy użyć zwrotu utworzyć kwerendę kryteria rodzaju dziecięcej, a następnie dodać szczególne warunki do zapytania Podtyp dziecko.

public virtual IList<T> GetByChildCriteria(string childName, 
    params ICriterion[] criterion) 
{ 
    ICriteria criteria = NHibernateSession 
    .CreateCriteria(persitentType) 
    .CreateCriteria(childName); 
    foreach (ICriterion criterium in criterion) 
    { 
     criteria.Add(criterium); 
    } 
    return criteria.List<T>(); 
} 

Uwaga: Zmienna NHibernateSession jest typu ISession.

Powiązane problemy