我有一个有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_A
和TABLE_B
中都有THE_ID
字段。我收到运行时错误提及BaseClass
有重复映射。
当我有两个子类时,我可以知道如何进行Hibernate映射吗?
答案 0 :(得分:2)
在SubClassB
定义中定义BaseClass
,以及SubClassA
定义。
答案 1 :(得分:1)
如果您创建两个类,则可以使用两个映射文件:
public class SubClassA extends BaseClass {
}
public class SubClassB extends BaseClass {
}
类的主体可以是空的,也可以有额外的成员变量(它们只需要默认的无参数构造函数,如果不编写其他构造函数,则需要它们)。在hibernate映射中,您可以访问父类的成员变量(甚至是私有成员变量!)。
然后你只需编写两个映射文件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>
P上。 S.在这种情况下,您必须不映射BaseClass。如果超类和子类都被映射,Hibernate会感到困惑。