我有以下地图。我希望将BasketItem映射到类“ Product”。所以基本上,当我遍历篮子时,我可以获得产品名称

<class name="BasketItem" table="User_Current_Basket">
<id name="Id" type="Int32" column="Id" unsaved-value="0">
<generator class="identity"/>
</id>
<property name="ProductId" column="Item_ID" type="Int32"/>
  <one-to-one   name="Product"
        class="Product"></one-to-one>
</class>


如何指定产品应将BasketItem.ProductId与Product.Id匹配

我也读过我应该避免一对一,而只使用一对多?如果要这样做,我该如何确保我只得到一个产品而不是一个集合。

//编辑

select * from BasketItem
inner join Products on BasketItem.Item_ID = Products.Item_ID

最佳答案

如何指定产品应将BasketItem.ProductId与Product.Id匹配


您的BasketItem应该在对象级别保留一个Product,而不是ProductId。映射应为:

<class name="BasketItem" table="User_Current_Basket">
  <id name="Id" type="Int32" column="Id" unsaved-value="0">
    <generator class="identity"/>
  </id>
  <one-to-one name="Product" class="Product"/>
</class>



  我也读过我应该避免一对一,而只使用一对多?如果要这样做,我该如何确保我只得到一个产品而不是一个集合。


如果您希望能够延迟加载Product,请选择“伪”多对一:

<class name="BasketItem" table="User_Current_Basket">
  <id name="Id" type="Int32" column="Id" unsaved-value="0">
    <generator class="identity"/>
  </id>
  <many-to-one name="Product" class="Product"/>
</class>

09-12 12:18
查看更多