1

2 つのサブクラスを持つ抽象基本クラスがあります。各サブクラスにはマップされたテーブルがありますが、基本クラスにはマップされていません。Hibernate にマップするには、次のようにします。

subclassA.hbm.xml 内

<class name="BaseClass" abstract="true">
  <id name="theid" type="string" column="THE_ID" lenght="15"/>

  <union-subclass name="SubClassA" table="TABLE_A">
     ...
  </union-subclass>
</class>

にも同じことが言えSubClassBます。

subclassB.hbm.xml 内

<class name="BaseClass" abstract="true">
  <id name="theid" type="string" column="THE_ID" lenght="15"/>

  <union-subclass name="SubClassB" table="TABLE_B">
     ...
  </union-subclass>
</class>

id は のメンバー変数でBaseClassありTABLE_ATABLE_B両方にフィーTHE_ID​​ルドがあります。のマッピングBaseClassが重複しているという実行時エラーが表示されます。

2 つのサブクラスがある場合、Hibernate マッピングを行う方法を教えてください。

4

2 に答える 2

2

定義と一緒に、定義SubClassB内で定義します。BaseClassSubClassA

于 2012-05-22T04:32:10.973 に答える
1

2 つのクラスを作成する場合は、2 つのマッピング ファイルを使用できます。

public class SubClassA extends BaseClass {
}

public class SubClassB extends BaseClass {
}

クラスの本体は空にすることも、追加のメンバー変数を含めることもできます (別のコンストラクターを作成しない場合に必要なのは、デフォルトのパラメーターなしのコンストラクターのみです)。hibernate マッピングでは、親クラスのメンバー変数 (プライベート メンバー変数も!) にアクセスできます。

次に、2 つのマッピング ファイル subclassA.hbm.xml を記述するだけです。

<class name="SubClassA" >
   <id name="theid" type="string" column="THE_ID" lenght="15"/>
   ...
</class>

および subclassB.hbm.xml

<class name="SubClassB">
  <id name="theid" type="string" column="THE_ID" lenght="15"/>
  ...
</class>

PS このシナリオでは、 BaseClass をマップしないでください。スーパークラスとサブクラスの両方がマップされている場合、Hibernate は混乱します。

于 2012-05-22T10:45:53.470 に答える