首页 > 解决方案 > 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 {

}

标签: javajpa

解决方案


你的意思是JPA中的继承。它不像普通的对象继承那么容易。这些实体是数据库表的映射,因此继承它们意味着数据库中的表是相互关联的。有多种类型的继承。

@MappedSuperclass是这些策略之一。使用时,父类和子类的所有字段都映射到一张表中。您可以使用 multi level @MappedSuperclass,但这些父级不会映射到表。

它可能会解决您的问题,如果您创建一个内容B扩展自A并标记它的类,@MappedSuperclass然后作为具体实体继承自它。所以变成了一个空类并保持原样但不同的父级。CBBC

您也可以使用其他策略。

例如,您可以使用 注释一个具体的实体类@Inheritance(strategy = InheritanceType.SINGLE_TABLE),然后从这些注释类继承的任何实体都将映射到同一个表中。

@Inheritance(strategy = InheritanceType.JOINED)为孩子和父母创建单独的表格,并将它们与 id 连接起来。

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)将为所有子项创建一个单独的表,并且任何包含来自实体和父项的所有道具。


推荐阅读