Hibernate继承的策略

时间:2012-03-15 13:21:05

标签: java hibernate inheritance annotations

我的webapp域包含三个实体:

  • ,代表人类主体,包含所有个人资料,例如姓名,姓氏,电话号码等。
  • 客户供应商:'人'的孩子。他们每个人都有特定的属性。

现在我想使用Hibernate(带有 annotations )将我的模型映射到带有客户供应商表的rdbms架构。我不想要一个通用的Person表,我不需要它。

我想要一个客户表,其中包含名称,姓氏,... +特定客户字段以及名称,姓氏...... +特定供应商字段的供应商表。

你认为这是愚蠢的吗?相反,什么是更好的解决方案? 如何实施

1 个答案:

答案 0 :(得分:2)

不,它不是傻瓜,它在Hibernate中直接支持,请参阅:9.1.5. Table per concrete class

<class name="Person">
    <id name="id" type="long" column="PERSON_ID">
        <generator class="sequence"/>
    </id>
    ...
    <union-subclass name="Customer" table="CUSTOMER">
        ...
    </union-subclass>
    <union-subclass name="Supplier" table="SUPPLIER">
        ...
    </union-subclass>
</class>

在带注释的JPA中,您可以写:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Person {
  ...
}

@Entity
public class Customer extends Person {
  ...
}

@Entity
public class Supplier extends Person {
  ...
}

如果您不需要执行交叉继承查询,例如:“给我所有名字为”Smith“的人,无论他们是客户还是供应商<​​/ em>”,这个策略都相当不错