マッピングしているデータベースには Plan エンティティが含まれています。各 Plan エンティティには、主要な部門 (多対 1 の関係) と、可能な追加部門のバッグ (多対多の関係) があります。部門は、'ID' 列と 'NAME' 列のみを持つルックアップ テーブルに格納されます。「PLAN」テーブルには「DEPARTMENT_ID」外部キー列があり、メインの部門を参照するために「DEPARTMENT」テーブルの ID を格納します。計画と追加の部門との関係は、「PLAN_ID」および「DEPARTMENT_ID」列を持つ相互参照表に保管されます。
これで、Plan クラスと Department クラスを使用して、この構造を正常にマッピングできました。
public class Plan
{
public virtual int Id { get; set; }
public virtual Department ExecutorDepartment { get; set; }
public virtual IList<Department> AdditionalExecutorDepartments { get; set; }
}
public class Department
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
<class name="Plan" table="PLAN">
<id name="Id" unsaved-value="0">
<column name="ID" not-null="true" />
<generator class="native"/>
</id>
<many-to-one name="ExecutorDepartment" class="Department" column="DEPARTMENT_ID"/>
<bag name="AdditionalExecutorDepartments" table="PLAN_DEPARTMENT">
<key column="PLAN_ID" />
<many-to-many class="Department" column="DEPARTMENT_ID"></many-to-many>
</bag>
</class>
<class name="Department" table="DEPARTMENT">
<id name="Id" unsaved-value="0">
<column name="ID" not-null="true" />
<generator class="native"/>
</id>
<property name="Name" column="NAME" type="string"/>
</class>
ただし、Department クラス (アプリケーション ロジックに関する限り、これはまったく役に立たない) を削除し、次のように Plan クラスに部門名を文字列として格納する方法を探しています。
public class Plan
{
public virtual int Id { get; set; }
public virtual string ExecutorDepartment { get; set; }
public virtual IList<string> AdditionalExecutorDepartments { get; set; }
}
それを行う方法はありますか?言っておきますが、データベースのデータを更新するつもりはありません。また、データベースの構造を変更することもできません。
PS<Join>
要素を使用して主要な部門を取得しようとしましたが、どうやら主キーでしか参加できないようです(https://nhibernate.jira.com/browse/NH-1452を参照)。