2010-06-01 5 views
0

J'ai un mappage NH commun;NHibernate. Un parent parent différent va chercher

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

Vous voulez obtenir la liste par ce critère

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> 

Mais j'ai en double .. Quand j'exécute une restriction (ou sans) Je suis collection distincte de commandes, mais les restrictions ou les freins ma requête . Je veux obtenir une collection distincte de commandes (chez le client). Qu'est-ce qui ne va pas. S'il vous plaît HELP!

Ce hql fonctionne. Pourquoi n'ai-je pas pu obtenir ce résultat par critères API?

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

Quelle est votre "idClient" dans l'exemple ci-dessus? et aussi dans les Restrictions.Ou vous utilisez idClient pour les propriétés Client et Fournisseur, ce n'est pas une erreur, n'est-ce pas? – VoodooChild

+0

idClient est id (int) du client. Non, ce n'est pas une erreur. J'ai besoin de cette logique. –

Répondre

0

vérifier votre mappage pour le fournisseur:

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

le nom de classe est erroné?

+0

C'est vrai. Il fait référence au même domaine que la propriété Client –