2010-06-01 3 views
0

У меня есть общее сопоставление NH;NHibernate. Отличный выбор родительского ребенка

<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 
+0

Каков ваш «idClient» в примере выше? а также в ограничениях. Или вы используете idClient для свойств Client и Provider, это не ошибка? – VoodooChild

+0

idClient - id (int) клиента. Нет, это не ошибка. Мне нужна эта логика. –

ответ

0

проверить отображение для поставщика:

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

имя класса не так!?

+0

Это правильно. Он относится к тому же домену, что и свойство Client –

Смежные вопросы