0

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 テーブルへの挿入を複数回実行するためです。

これにより、リンク テーブルに重複レコードが発生します。どうすればこれを防ぐことができますか?

4

1 に答える 1