テーブルを考えると:
TableA
aId
...
TableB
bId
...
TableC
aId
cId // Maps to TableB.bId
つまり、TableA と TableB は、TableC のエントリを通じてのみ関連付けられます。
次のクラスが必要です。
public class ClassA
{
aId
...
}
public class ClassB
{
bId
...
}
public class ClassD : ClassA
{
ClassB
}
そのため、ClassD には ClassA のすべてのプロパティがあり、ClassB の単一のインスタンスが追加されています。
私の最初の考えは、使用することでした:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping auto-import="false" xmlns="urn:nhibernate-mapping-2.2">
<class name="ClassD" lazy="false" table="TableA" polymorphism="explicit">
<id name="aId" column="aId" type="Guid">
<generator class="CustomGuidGenerator" />
</id>
...
<many-to-one name="ClassB" column="cId" class="ClassB" cascade="all" not-found="ignore" />
</class>
</hibernate-mapping>
明らかに、このマッピングでは、TableA に cId はなく、多対 1 でテーブルを指定する方法もありません。では、中間結合テーブルを介して単一のエンティティをどのようにマップするのでしょうか?