NHibernate. Отчетливая выборка родительского дочернего элемента

У меня есть обычное отображение NH;

  <class name="Order, SummaryOrder.Core" table='order'>
      <id name="Id" unsaved-value="0" type="int">
         <column name="id" not-null="true"/>
         <generator class="native"/>
     </id>
    <many-to-one name="Client" class="SummaryOrderClient, SummaryOrder.Core"      column="summary_order_client_id"
            cascade="none"/>
    <many-to-one name="Provider" class="SummaryOrderClient, SummaryOrder.Core" column="summary_order_provider_id"
           cascade="none"/>
    <set name="Items" cascade="all">
        <key column="order_id"/>
        <one-to-many class="OrderItem, Clients.Core" />
    </set>  
 </class>

Хочу получить список по этому критерию

ICriteria criteria = NHibernateStateLessSession.CreateCriteria(typeof(SummaryOrder.Core.Domains.Order)); ;
        criteria.Add(Restrictions.Or
                (Restrictions.Eq(String.Format("{0}.Id", SummaryOrder.Core.Domains.Order.Properties.Client), idClient),
                  Restrictions.Eq(String.Format("{0}.Id", SummaryOrder.Core.Domains.Order.Properties.Provider), idClient))).
                  SetResultTransformer(new DistinctRootEntityResultTransformer()).
                  SetFetchMode(SummaryOrder.Core.Domains.Order.Properties.Items, FetchMode.Join);
        return criteria.List<SummaryOrder.Core.Domains.Order>() as List<SummaryOrder.Core.Domains.Order>

Но у меня есть дубликаты .. Когда я выполняю Одно ограничение (без ИЛИ), я получаю отдельный набор заказов, но Ограничение ИЛИ тормозит мой запрос. Хочу получить четкий (пока у клиента) сбор заказов. Что случилось. Пожалуйста помоги!

Этот hql работает. Почему я не смог получить такой результат по API критериев?

       select distinct o from Order o left join fetch o.Items where o.Client.Id=1 or o.Provider.Id=1

person Andrew Kalashnikov    schedule 01.06.2010    source источник
comment
какой у вас idClient в приведенном выше примере? а также в Ограничениях. Или вы используете idClient для свойств клиента и поставщика, это не ошибка, не так ли?   -  person VoodooChild    schedule 01.06.2010
comment
idClient - это идентификатор (int) клиента. Нет, это не ошибка. Мне нужна эта логика.   -  person Andrew Kalashnikov    schedule 01.06.2010


Ответы (1)


проверьте ваше сопоставление для Provider:

<many-to-one name="Provider" class="SummaryOrderClient, SummaryOrder.Core"     column="summary_order_provider_id"
           cascade="none"/>

имя класса неправильное !?

person VoodooChild    schedule 01.06.2010