我正在通过可用策略的JPA specification来将继承关系映射到关系模型。我并不安静地理解规范中的以下陈述:
每个类层次结构策略的单个表:
“此策略为覆盖整个实体类层次结构的实体和查询之间的多态关系提供了良好的支持”
每个具体课程策略表:
“这种策略对多态关系提供的支持很少”
任何人都可以进一步澄清这些关于多态性如何受这些策略影响的陈述的含义吗?
答案 0 :(得分:4)
考虑我们有一个域模型如下
请研究下面提供的链接。
<强> Single Table Strategy 强>:
<强> Joined Table Strategy 强>
<强> Table per concrete class 强> - 同样,数据存储在多个表中,因此
Table per concrete class exmaple
这完全取决于您的要求。如果您有足够的数据库并且需要性能,那么单表策略就是您的选择。如果您有数据库约束,则应遵循其他策略。
答案 1 :(得分:2)
考虑以下示例。每个具体类别策略的表格
这里将每个具体类映射为普通的持久类。所以我们有3张桌子; PERSON,EMPLOYEE和OWNER持有班级数据。在此,子类的映射重复父类的属性。
这里有一些缺点:
答案 2 :(得分:0)
答案 3 :(得分:0)
每个类层次结构的单个表
此策略在实体和查询之间提供了良好的多态关系,因为JPA可以通过其DiscriminatorValue
预测查询的实体。例如,假设您有一个这样的实体。
select a, b, c, type from table_c;
并且通过使用JPA,您可以获得A类或B类,即使您正在使用table_c,也可以通过在该表中添加新列来更轻松地创建新实体。 (这是人们通常所说的Denormalisation
)
每个具体类别的表格
这种策略对多态关系的支持很差,因为一个表只适用于一个类。这意味着如果您需要创建一个新实体,那么您应该创建一个新表。