2

テーブルを考えると:

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 でテーブルを指定する方法もありません。では、中間結合テーブルを介して単一のエンティティをどのようにマップするのでしょうか?

4

1 に答える 1

1

テーブルに正確に何があるかわかりません ( TableC.aId は TableA.aId への参照ですか?) が、サブクラスごとのテーブル戦略に進むことができます (たとえば、http://docs.huihoo.com/hibernateを参照) /nhibernate-reference-1.2.0/inheritance.html )

<class name="ClassA" table="TableA">
  <id name="aId" column="aId" type="Guid">
    <generator class="CustomGuidGenerator" />
   </id>        
    <joined-subclass name="ClassD" table="TableC">
        <key column="aId"/>
        <many-to-one name="ClassB" column="cId" class="ClassB" cascade="all" not-found="ignore" />
    </joined-subclass>
</class>

についてClassBは、独自のマッピング ファイルが必要であり、システムは多対 1ClassBプロパティのテーブル名 (TableB) を計算できます。

于 2013-01-16T17:16:44.630 に答える