2010-05-15 103 views
1

我有以下映射。我的意图是order.BasketId映射到orderItem.BasketId。当我看到SQL我看到它映射 order.Id orderItem.BasketId。我如何在我的订单图中定义哪些订单属性映射到basketId。它似乎默认为主键。nhibernate:映射到主键以外的列

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

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

回答

0

你可以改变结构呢?我将有一个Basket实体,其中包含订单项目。然后你的订单就是指这个篮子,而篮子里包含着这些物品。 Order中的显式basketID绕过了hibernate所做的一些ORM。

+0

我已经继承了这个混乱的数据库结构。理想情况下,我会改变它,就像你说的,但我真的不知道如何将这个应用程序的其余部分,有点陷入没有人的土地, – frosty 2010-05-15 11:08:02

8

使用以下:

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

就是这样。

+0

啊,我明白了。再次感谢:) – frosty 2010-05-15 12:09:35

+0

谢谢!这对我帮助很大!我注意到一个property-ref属性是必需的,在我的多对一的子类关系上。但是这导致了选择N + 1问题 – Vasea 2011-02-09 15:22:34