NHibernate 2 アプリケーションに、場所と多対多の関係を持つ Product エンティティがあります。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>
一度に 1 つの製品を挿入するだけの場合、これはすべて正常に機能します。ただし、複数の製品を一括で挿入すると失敗します。
製品自体は正常に挿入されますが、各製品は独自の一意の ID を取得し、多対多 (Locations) および複合要素 (ProductComponent) の要素は適切に挿入されません。これは、NHibernate が同じ ProductId を使用して ProductLocation テーブルへの挿入を複数回実行するためです。
これにより、リンク テーブルに重複レコードが発生します。どうすればこれを防ぐことができますか?