0

我在 NHibernate 2 应用程序中有一个与位置具有多对多关系的产品实体。Location 实体没有任何导航属性或返回产品的映射。它的映射如下:

<bag name="Locations" table="ProductLocation" cascade="none">
  <key column="ProductId" />
  <many-to-many column="LocationId" class="Location"/>
</bag>

该产品还有一个复合元素,一个具有通过 ProductComponent 类映射的浓度的组件。该类没有导航属性或映射回产品。

<bag name="ProductComponents" table="ProductComponent" access="nosetter.camelcase">
  <key column="ProductId" />
  <composite-element class="ProductComponent">
    <property name="Concentration"/>
    <many-to-one name="Component" column="ComponentId" access="nosetter.camelcase"/>
  </composite-element>
</bag>

当一次只插入一个产品时,这一切都很好。但是,当批量插入多个产品时它会失败。

虽然产品本身可以很好地插入,但每个产品都有自己的唯一 ID,多对多(位置)和复合元素(产品组件)中的元素没有很好地插入。这是因为 NHibernate 多次执行对具有相同 ProductId 的 ProductLocation 表的插入。

这会导致链接表中出现重复记录。如何防止这种情况?

4

1 回答 1

1

您必须将关系的一个站点定义为所有者,以便只有一侧进行插入。这可以通过Inverse在另一侧设置为 true 来实现。

在这里找到更详细的解释

于 2013-10-14T06:56:05.183 回答