2016-06-22 12 views
0

PET、CAT、EXTENSION.CATの3つのテーブルを持つデータベースを考えてみましょう。ここで、PetはCatの基本クラスで、Extension.Catには追加のプロパティ猫のために。私は動作するはずです以下、それはdoesnの仮定と思いますが、そうNHibernateを使用して複数の結合テーブルをストラテジごとにマッピングする方法

<class name="Cat" table="CAT"> 
    <id name="id" column="ID">...</id> 
    <property name="isMouser"/> 
    <join table="CAT" schema="EXTENSION" > 
     <key column="ID"/> 
     <property name="fuzziness"/> 
     <property name="cuteness"/> 
    </join> 
</class> 

: - CatExのこのような関係

<class name="Pet" table = "PET"> 
    <id name="id" column="ID">...</id> 
    <property name="name"/> 
    <property name="age"/> 
    <joined-subclass name="Cat" table="CAT"> 
     <key column="ID"/> 
     <property name="isMouser"/> 
    </joined-subclass> </class> 

と猫:このようなものを使用して猫の関係 - NHibernateのは、ペットをモデル化でき't:

<class name="Pet" table = "PET"> 
    <id name="id" column="ID">...</id> 
    <property name="name"/> 
    <property name="age"/> 
    <joined-subclass name="Cat" table="CAT"> 
     <key column="ID" /> 
     <property name="isMouser"/> 
     <join table="CAT" schema="EXTENSION" > 
      <key column="ID"/> 
      <property name="fuzziness"/> 
      <property name="cuteness"/> 
     </join> 
    </joined-subclass> 
</class> 

Nhibernateのドキュメントでは、このシナリオについては説明しません。クラス階層ごとに複数テーブルをモデル化する適切な方法は何ですか?

答えて

0

このシナリオをモデル化する適切な方法は、暗黙の多型パターンを使用することです。

<class name="Cat" table = "PET"> 
    <id name="id" column="ID">...</id> 
    <property name="name"/> 
    <property name="age"/> 
    <join table="CAT"> 
     <key column="id"/> 
     <property name="isMouser"/> 
    </join> 
    <join table="CAT" schema="EXTENSION" > 
     <key column="id"/> 
     <property name="fuzziness"/> 
     <property name="cuteness"/> 
    </join> 
</class> 

ここで重要な点は、親テーブル(PET)が参照される最初のテーブルであることですが、私たちはCatクラスをモデル化しています。このシナリオは、派生クラスごとに複数のテーブルを効果的に提供します。

潜在的な問題は、結合列の名前が一致せず、子表の列のプロパティがマップされたクラスに存在することです。 NHibernateはこれらの追加のクラスプロパティにマッピングを持たせる必要があります。子テーブルのプロパティに "generated = insert"、 "insert = false"、 "update = false"属性を追加すると、NHibernateはそのプロパティを読み取り専用にします。

<class name="Cat" table = "PET"> 
    <id name="petid" column="PETID">...</id> 
    <property name="name"/> 
    <property name="age"/> 
    <join table="CAT"> 
     <key column="catid"/> 
     <property name="isMouser"/> 
     <property name="catid" generated="insert" insert="false" update="false" /> 
    </join> 
    <join table="CAT" schema="EXTENSION" > 
     <key column="catexid"/> 
     <property name="fuzziness"/> 
     <property name="cuteness"/> 
     <property name="catexid" generated="insert" insert="false" update="false" /> 
    </join> 
</class> 
関連する問題