2010-05-15 4 views
1

J'ai la carte suivante. Mon intention est pour l'order.BasketId pour mapper à orderItem.BasketId. Tho quand je regarde le sql je vois que c'est la cartographie order.Id à orderItem.BasketId. Comment puis-je définir dans ma commande la carte qui commande la propriété à mapper avec basketId. Il semble par défaut à la clé primaire.nhibernate: mappage vers une colonne autre que la clé primaire

<class name="Order" table="Orders"> 
    <id name="Id" type="Int32" column="Order_ID" unsaved-value="0"> 
     <generator class="identity"/> 
    </id> 

    <property name="BasketId" column="Basket_ID" type="Int32"/> 
    <set name="OrderItems" table="item_basket_contents" generic="true" inverse="true" > 
     <key column="Basket_ID" /> 
    <one-to-many class="EStore.Domain.Model.OrderItem, EStore.Domain"/>  
    </set> 
    </class> 

et OrderItem

<class name="OrderItem" table="Item_Basket_Contents"> 
    <id name="Id" type="Int32" column="ID" unsaved-value="0"> 
     <generator class="identity"/> 
    </id> 

    <property name="BasketId" column="Basket_ID" type="Int32"/> 
    </class> 

Répondre

0

Pouvez-vous changer la structure? J'aurais une entité Basket, qui contient les éléments de la commande. Votre commande se réfère alors à ce panier, et le panier contient les articles. L'identificateur de panier explicite dans l'ordre contourne certains des ORM qu'Hibernate fait.

+0

J'ai hérité de cette structure DB qui est un désordre. idéalement, je voudrais le changer comme vous l'avez dit, mais je ne suis pas vraiment sûr de savoir comment ce serait le reste de l'application, un peu pris dans aucune terre Mans, – frosty

8

Utilisez les éléments suivants:

<key column="Basket_ID" property-ref="BasketId" /> 

Voilà.

+0

ah, je vois. merci encore :) – frosty

+0

merci! Cela m'a beaucoup aidé! J'ai remarqué qu'un attribut property-ref était requis et mon cours many-to-one sur la relation enfant. Mais cela causait un problème N + 1 sélectionné – Vasea

Questions connexes