在大多数Web应用程序中,我看到一个基类包含公共属性和扩展基类的子类数.所以我的问题是我们应该在Table Per Subclass Vs Table Per Tables中采用哪种策略.我个人认为我们应该为每个子类使用表格,因为将来如果我们想要引入公共列,我们可以在一个地方进行,但是在具体类的情况下,我们必须在多个表中进行.对?
但是如果我们想从所有子表中获取所有deatils,我认为每个具体类的表将有用因为我们必须简单地将所有表中的记录联合起来,但是如果是每个Sub类的表以及union,我们必须引入连接与父表,这将是额外的成本.对?
Pio*_*cki 23
您可能对JPA 2.0规范的第2.12节"继承映射策略"感兴趣,因为它总结了所有可能的继承类型及其优缺点.让我拿出最有趣的片段:
2.12.1每类层次结构策略的单表
此映射策略为 实体之间的多态关系以及范围在类层次结构上的查询提供了良好的支持.然而,它的缺点是它要求对应于子类特定状态的列可以为 空.
2.12.3每个具体类别战略表
这种策略有以下缺点:
- 它对多态关系提供的支持很少.
- 通常要求为旨在覆盖类层次结构的查询发出SQL UNION查询(或每个子类的单独SQL查询).
2.12.2加入子类策略
它的缺点是它需要 执行一个或多个连接操作来实例化子类的实例.在深层次结构中,这可能会导致不可接受的性能.类层次结构范围内的查询同样需要连接.
此外,如果您计划与JPA兼容,请记住JPA提供程序不必支持TABLE_PER_CLASS
策略类型.
我个人认为我们应该为每个子类使用表格,因为将来如果我们想要引入公共列,我们可以在一个地方进行,但是在具体类的情况下,我们必须在多个表中进行.
是的,但是JOINED策略还为您提供了相同的功能,并允许在一个表中指定公共属性.
希望有所帮助!
Pre*_*raj 13
在对象模型中,在创建对象时,我们可能需要使用继承,即泛化如下:
在关系模型中,上面的泛化(不是关联,即一对一或多对多)可以在Hibernate ORM中实现以下三种继承映射策略:
在这个策略中,我们可以将整个层次结构映射到单个表中,这里我们使用另一个鉴别器列,即TYPE.
在此策略中,表按类创建,但由外键关联.所以没有重复的列.
在此策略中,表按类创建,但由外键关联.所以没有重复的列.
归档时间: |
|
查看次数: |
14973 次 |
最近记录: |