【问题标题】:How to map 2 subclass with 1 parent abstract class in hibernate?如何在休眠中映射 2 个子类和 1 个父抽象类?
【发布时间】:2012-05-22 03:28:25
【问题描述】:

我有一个包含 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是BaseClass中的成员变量,TABLE_ATABLE_B都有THE_ID字段。我收到一个运行时错误,提到 BaseClass 具有重复映射

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

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

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

    【讨论】:

    • 是说SubClassB和SubClassA是BaseClass的成员变量吗?
    • 不,它们不必是成员变量。它们只需要在你的基类下的休眠映射中定义。
    【解决方案2】:

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

    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>
    

    和子类B.hbm.xml

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

    P。 S. 在这种情况下,您必须映射 BaseClass。如果超类和子类都被映射,Hibernate 会感到困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 2017-11-14
      • 2013-02-09
      • 1970-01-01
      相关资源
      最近更新 更多