2

Rotationオブジェクトの複数のリストへの参照を含むクラスがありますAdvertRotationこれらを保持する型のプロパティを持つ実装を希望しますList<List<Advert>>が、これをサポートする NHibernate マッピングを思い付くことができません。

Rotationデータベース スキーマでは、との間の多対多の関係は、次の列をAdvert持つテーブルとして表されます。RotationAdvert

  • RotationID
  • AdvertID
  • Variant(「水平位置」/外部リスト内のインデックス)
  • Position(「垂直位置」/内部リスト内のインデックス)

私が見つけた最善の解決策は、固定数のList<Advert>型付きプロパティを実装し、それぞれの要素でRotationマッピングを拡張することです。<list>

<list name="Variant1" table="RotationAdvert" where="Variant = 1">
    <key column="RotationID"/>
    <index column="Position"/>
    <many-to-many class="Advert" column="AdvertID"/>
</list>

<list name="Variant2" table="RotationAdvert" where="Variant = 2">
    <key column="RotationID"/>
    <index column="Position"/>
    <many-to-many class="Advert" column="AdvertID"/>
</list>

etc...

ただし、これには固定数のバリアントを指定する必要があり、これは避けたいと思います。

他のオプションは何ですか? RotationVariantデータベースに新しいテーブルを作成せずに、クラスをモデルに絞り込んで、どうにかしてList<RotationVariant>プロパティをマップできますRotationか? または、それぞれの ID を保持するためだけに、データベースに新しいテーブルを作成する必要がありますRotationVariantか?

4

3 に答える 3

1

今日、この同じ問題に遭遇しました。Hibernate のドキュメントを読んで、セクション 6.1: Collection Mapping https://www.hibernate.org/hib_docs/nhibernate/html/collections.html で答えを見つけました

コレクションに他のコレクションを含めることはできません

NHibernate のドキュメントでこの正確な文を見つけることができませんでしたが、同じ規則が適用されるようです。Stephan と Chris が言ったように、おそらく値を保持するために別のエンティティが必要になるでしょう。

于 2010-01-13T21:42:26.417 に答える
0

広告のリストを保持する Rotation クラスを持つことを提案します。広告は、親子関係で子広告のリストを保持します。

于 2010-01-08T19:53:23.120 に答える