java - java实体的继承3级
问题描述
我想在 Java 实体中创建 3 级继承
示例:A <- B <- C
其中B从A继承,C从B继承
我尝试在 A 类中使用 @MappedSuperclass :
@MappedSuperclass
public class A {
}
实体 B 扩展 A :
@Entity
public class B extends A {
}
实体 B 映射到具有 A 字段和 B 字段的数据库表
如何添加扩展 B 和 A 的第三级 C,我尝试了以下代码,但实体 C 未映射到表:
@Entity
public class C extends B {
}
解决方案
你的意思是JPA中的继承。它不像普通的对象继承那么容易。这些实体是数据库表的映射,因此继承它们意味着数据库中的表是相互关联的。有多种类型的继承。
@MappedSuperclass
是这些策略之一。使用时,父类和子类的所有字段都映射到一张表中。您可以使用 multi level @MappedSuperclass
,但这些父级不会映射到表。
它可能会解决您的问题,如果您创建一个内容B
扩展自A
并标记它的类,@MappedSuperclass
然后作为具体实体继承自它。所以变成了一个空类并保持原样但不同的父级。C
B
B
C
您也可以使用其他策略。
例如,您可以使用 注释一个具体的实体类@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
,然后从这些注释类继承的任何实体都将映射到同一个表中。
@Inheritance(strategy = InheritanceType.JOINED)
为孩子和父母创建单独的表格,并将它们与 id 连接起来。
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
将为所有子项创建一个单独的表,并且任何包含来自实体和父项的所有道具。
推荐阅读
- jquery - 如何检查两个时间之间的差异以及它是否在角度 2/4 的同一日期?时间格式,如“HH:mm AM”
- c# - 如何在调用 API 之前启动注入服务?
- reactjs - ReactJs 无法在“历史”上执行“pushState”:
- c# - 如何分别获取其中包含的url和产品代码
- django - Django 卷曲请求
- c++ - QWT 轴强制主刻度为零
- android - 我怎样才能打开whatsapp聊天设置页面?
- javascript - 使用 vue js 将 js 变量显示为 html
- ios - 参数标签 '(_:, heightForRowAt:)' 不匹配任何可用的重载
- c# - 如何在sql中的另一个表中插入已删除的行