根据 Hibernate 文档,
MappedSuperclass
允许映射继承,其中超类不被视为实体,并且不支持通过基类获取对象的多态查询。
另一方面,“每类一张表”策略在数据库中生成的模式方面类似,只是如果超类不是抽象类,它会将超类映射到表。然而它支持多态查询。 我的问题是:为什么有人会使用
@MappedSuperclass
策略?如果将父类视为实体,是否会隐含性能问题?任何有关此的想法都值得赞赏。
@MappedSuperclass
注释超类,才能将其属性嵌入到具体的子类表中。
@AttributeOverride
注释或多个
@AttributeOverrides
重写子类中超类的列映射。
SELECT
执行查询,每个具体子类一个。
@AttributeOverrides
之类的事情。它还使得实现适用于所有子类的数据库完整性约束变得更加困难。
@MappedSuperclass
映射策略的。
TABLE_PER_CLASS
是可选的,因此并非所有 JPA 实现都支持它。该实现也依赖于供应商 - 在 Hibernate 中,它相当于旧的本机 Hibernate XML 元数据中的
<union-subclass>
映射。
UNION
查询来模拟单个表作为关联映射的目标。
附注这几乎是逐字引述的优秀书籍:
Java Persistence with Hibernate(Bauer、King、Gregory)