我在NHibernate 2应用程序中有一个Product实体,它与Location有多对多的关系。 Location实体没有任何导航属性或映射回产品。它映射如下:
<bag name="Locations" table="ProductLocation" cascade="none">
<key column="ProductId" />
<many-to-many column="LocationId" class="Location"/>
</bag>
该产品还有一个复合元素,一个具有通过ProductComponent类映射的浓度的Component。该类没有导航属性或映射回产品。
<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,多对多(位置)和复合元素(ProductComponent)中的元素不能很好地插入。这是因为NHibernate多次使用相同的ProductId执行对ProductLocation表的插入。
这会在链接表中导致重复记录。如何防止这种情况?
答案 0 :(得分:1)
您必须将关系的一个站点定义为所有者,以便只有一方执行插入。这可以通过另一方将Inverse
设置为true来实现。