在Hibernate中映射多级继承

时间:2008-11-04 10:07:52

标签: java hibernate inheritance orm

目前我的结构如下:

A
|
+--B
|
+--C

使用连接表为每个子类映射一个表。由于历史原因,我也使用鉴别器,因此目前的情况如Section 9.1.3 of the Hibernate manual所述。

问题:如何扩展此类结构的映射:

A
|
+--B
|  |
|  D
|
+--C

我可以在hibernate映射中<subclass> <subclass>吗?我需要<key>什么?

2 个答案:

答案 0 :(得分:6)

未经过测试 但是,根据您发布的链接,如果您使用的是hibernate3

<hibernate-mapping>
  <class name="A" table="A">
    <id name="id" type="long" column="a_id">
      <generator class="native"/>
    </id>
    <discriminator column="discriminator_col" type="string"/>
    <property name="" type=""/>
    <!-- ... -->
  </class>
  <subclass name="B" extends="A" discriminator-value="B">
    <!-- ... -->
  </subclass>
  <subclass name="D" extends="B" discriminator-value="D">
    <!-- ... -->
  </subclass>
  <subclass name="C" extends="A" discriminator-value="C">
    <!-- ... -->
  </subclass>
</hibernate-mapping>

答案 1 :(得分:0)

使用注释,可以按如下方式完成:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="LoanType",discriminatorType="String")
@Table(name = "A")
public class A implements Serializable{
}

@Entity
@Table(name= "B")
@PrimaryKeyJoinColumn(name = "B_ID", referencedColumnName ="A_ID")
public class B extends A{
}


@Entity
@Table(name= "C")
@PrimaryKeyJoinColumn(name = "C_ID", referencedColumnName = "B_ID")
public class C extends B{}