2017-06-13 2 views
0

私は継承戦略を使用しています:表ディスクリミネータを使用するサブクラス戦略ごとです。コレクションは、サブクラスごとにディスクリミネータを使用してサブクラスでは使用できません

私のPOJOクラス

public abstract Class A{ 
... 
} 

public Class B extends A{ 
private List <D> collection 
...... 
} 

public Class C extends A{ 
.......... 
} 

public class D{ 
......... 
} 

のHibernateのマッピング以下のように、私は以下の例外 要素型の内容を取得しています

<hibernate-mapping> 

<class name="A" entity-name="A" 
    abstract="true" discriminator-value="ABS_A" 
    table="A"> 
    <id name="id" type="java.lang.String"> 
     <column not-null="true" unique="false" name="`ID`" /> 
     </id> 
     <discriminator type="string"> 
     <column name="`ABS_A_DISCRIMINATOR`" index="A_discriminator" 
      length="255" not-null="true" /> 
     </discriminator> 
      ........................ 
     </class> 

     <subclass extends="A" entity-name="B" 
      name="B" 
      discriminator-value="B"> 

     <join table="B" fetch="select"> 
     <key><column name="ID" /></key> 
      <list name="collection" table="B_D" cascade="all" lazy="true"> 
     <key column="ID" /> 
     <list-index column="idx" /> 
      <many-to-many entity-name="D" unique="false"> 
      </many-to-many> 
       </list> 
      .................... 
     </join> 
     </subclass> 

     <subclass extends="A" entity-name="C" 
      name="C" 
      discriminator-value="C"> 

     <join table="C" fetch="select"> 
     <key><column name="ID" /></key> 
     ................ 
     </join> 
     </subclass> 

    <class name="D" entity-name="D" table="D"> 
    ..................... 
    </class> 
<hibernate-mapping> 

の下に "参加" として(」一致している必要があります(sql-insert?、sql-update?、sql-delete?) ")のいずれかを使用します。

もしjoinタグがlist/set/idbag/bagを許さないならば、これを達成する他の方法はありますか?私はdiscriminator戦略なしでサブクラスごとのテーブルを使うときに不必要な結合が起こるためこの問題に遭遇しました。

注:厳密には、正規化されたdbモデルが必要です。

事前に感謝します!...

答えて

0

我々は

<subclass extends="A" entity-name="B" 
      name="B" 
      discriminator-value="B"> 

    <list name="collection" table="B_D" cascade="all" lazy="true"> 
     <key column="ID" /> 
     <list-index column="idx" /> 
     many-to-many entity-name="D" unique="false"> 
      </many-to-many> 
    </list> 

............... 
</subclass> 

以下のようにのようなサブクラスタグの下にリストを追加することができますタグは内部のリストを許可し参加します。

関連する問題