2012-03-15 156 views
0

我的web应用程序域由三个实体:哪种策略对Hibernate继承

  • ,它代表的人类个体,与所有的个人数据,如姓名,电话号码等。
  • 客户供应商:'人'的孩子。他们每个人都有特定的属性。

现在我想使用Hibernate(与注释)为我的模型客户供应商表映射到关系数据库架构。我不想要一个通用的Person表,我不需要它。

我想要一个名称,姓氏,... +特定客户字段的客户表和名称,姓氏...... +特定供应商字段的供应商表。

你认为这很愚蠢吗?什么是更好的解决方案呢?而如何实现呢

+0

阅读文档如何?参见http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e7287和http://docs.jboss.org/hibernate/core/3.6/reference/en-US/ html_single /#mapping-declaration-unionsubclass – 2012-03-15 13:29:42

回答

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’,无论无论他们是客户还是供应商“,这个策略相当不错。

+0

1)是否会创建一个PERSON表? – 2012-03-15 13:29:52

+1

@FabioB:不,它不符合你的要求。 – 2012-03-15 13:31:27