我的 webapp 域由三个实体组成:
- Person,代表人类主体,包含所有个人数据,例如姓名、电话号码等。
- 客户和供应商:“Person”的子级。它们每个都有特定的属性。
现在我想使用 Hibernate(带有注释)将我的模型映射到带有 customers 和 suppliers 表的 RDBMS 架构。我不需要通用的 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”的人,无论他们是客户还是供应商</em>”,这个策略非常好.
关于java - Hibernate继承的策略是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9720550/