2010-06-01 56 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> 

拿到名單,但我有重複。當我執行一個限制(沒有OR)我的訂單不同集合,但限制或剎車我的查詢。我想弄清楚(在客戶端)訂單的集合。怎麼了。請幫忙!

這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 for Client和Provider屬性,這不是一個錯誤嗎? – VoodooChild 2010-06-01 04:03:19

+0

idClient是Client的id(int)。不,這不是錯誤。我需要這個邏輯。 – 2010-06-01 04:19:30

回答

0

檢查您的映射提供商:

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

類的名字是錯的!?

+0

它是正確的。它指與客戶端屬性相同的域 – 2010-06-01 04:34:34