多対多の関係をいずれかのクラスに配置することも、両方に配置することもできます。これはドメイン モデル次第です。両方にマッピングすると、一方が逆になります。
class Person
{
// id ...
IList<Competency> Competencies { get; private set; }
// you domain model is responsible to manage bidirectional dependencies.
// of course this is not a complete implementation
public void AddCompetency(Competency competency)
{
Competencies.Add(competency);
competency.AddPerson(this);
}
}
class Competency
{
// id ...
IList<Person> Persons { get; private set; }
}
マッピング:
<class name="Person">
<id ....>
<bag name="Competencies" table="Person_x_Competency">
<key column="personId"/>
<many-to-many class="Competency" column="competencyId"/>
</bag>
</class>
<class name="Competency">
<id ....>
<bag name="Persons" table="Person_x_Competency" inverse="true">
<key column="competencyId"/>
<many-to-many class="Person" column="personId"/>
</bag>
</class>
本当に必要な場合にのみ、双方向にしてください。
ところで、最初にクラスを作成し、後でデータベース設計を作成する方がはるかに優れています。データベースは、マッピング ファイルからエクスポートできます。これは非常に便利です。