1

我有一个具有 2 个子类的抽象基类。每个子类都有一个映射到其中的表,而基类没有。为了让我映射到 Hibernate,我这样做:

在子类A.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

在子类 B.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 是 中的成员变量BaseClassTABLE_A并且TABLE_B两者都有THE_ID字段。我收到一个运行时错误,提到BaseClass重复映射

当我有两个子类时,我可以知道如何进行 Hibernate 映射吗?

4

2 回答 2

2

SubClassB在定义中定义BaseClass,与SubClassA定义一起。

于 2012-05-22T04:32:10.973 回答
1

如果您创建两个类,则可以使用两个映射文件:

public class SubClassA extends BaseClass {
}

public class SubClassB extends BaseClass {
}

类的主体可以是空的,或者它们可以有额外的成员变量(它们只需要默认的无参数构造函数,如果你不编写另一个构造函数,它们就有)。在休眠映射中,您可以访问父类的成员变量(甚至是私有成员变量!)。

然后你只需写两个映射文件 subclassA.hbm.xml

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

和子类B.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 回答