我的web应用程序域由三个实体:哪种策略对Hibernate继承
- 人,它代表的人类个体,与所有的个人数据,如姓名,电话号码等。
- 客户和供应商:'人'的孩子。他们每个人都有特定的属性。
现在我想使用Hibernate(与注释)为我的模型客户和供应商表映射到关系数据库架构。我不想要一个通用的Person表,我不需要它。
我想要一个名称,姓氏,... +特定客户字段的客户表和名称,姓氏...... +特定供应商字段的供应商表。
你认为这很愚蠢吗?什么是更好的解决方案呢?而如何实现呢?
我的web应用程序域由三个实体:哪种策略对Hibernate继承
现在我想使用Hibernate(与注释)为我的模型客户和供应商表映射到关系数据库架构。我不想要一个通用的Person表,我不需要它。
我想要一个名称,姓氏,... +特定客户字段的客户表和名称,姓氏...... +特定供应商字段的供应商表。
你认为这很愚蠢吗?什么是更好的解决方案呢?而如何实现呢?
不,它不是愚蠢的,它在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’,无论无论他们是客户还是供应商“,这个策略相当不错。
1)是否会创建一个PERSON表? – 2012-03-15 13:29:52
@FabioB:不,它不符合你的要求。 – 2012-03-15 13:31:27
阅读文档如何?参见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