Критерии nHibernate выбора родителя, если у ребенка в наборе есть определенное значение

Если у меня есть следующая структура класса, что критерии NHibernate должно выбрать родителя, если один из него - дети, имеет собственное имя?

 public class Child
 {
     public int Id { get; set; }
     public int Name { get; set; }
 }

 public class Parent
 {
     public int Id { get; set; }
     public IList<Child> Children { get; set; }
 }
5
задан harriyott 11 January 2013 в 11:18
поделиться

2 ответа

Я бы просто создал псевдоним коллекции и добавил ограничения.

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

Это приведет к

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

Преобразователь отдельного корневого объекта обработает набор результатов и удалит повторяющиеся родительские объекты. Тем не менее, они все еще сталкиваются с проволокой.

16
ответ дан 18 December 2019 в 10:42
поделиться

Я создал запрос критерия для родительского типа, использовал возвращаемый элемент для создания запроса критериев для дочернего типа, а затем добавил конкретные условия в подзапрос дочернего типа.

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

Примечание: Переменная NHibernateSession относится к типу ISession.

0
ответ дан 18 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: