在实际项目设计中,咱们能够但愿在 JPA 中定义 @Entity 表。java
可是在这个 @Entity 类中,咱们但愿 extends 另一个类,在另一个类中咱们能够把一些通用的属性设置到里面。数据库
例如:app
public class Covid19Current extends DataObject implements java.io.Serializable {ide
}spa
那么咱们应该在 DataObject 添加什么注解?设计
须要在 DataObject 中添加 @MappedSuperclass 注解。blog
能够定义成以下:继承
@MappedSuperclass
public abstract class DataObject {
}接口
@MappedSuperclass注解只能标准在类上:@Target({java.lang.annotation.ElementType.TYPE})rem
标注为@MappedSuperclass的类将不是一个完整的实体类,他将不会映射到数据库表,可是他的属性都将映射到其子类的数据库字段中。
标注为@MappedSuperclass的类不能再标注@Entity或@Table注解,也无需实现序列化接口。
可是若是一个标注为@MappedSuperclass的类继承了另一个实体类或者另一个一样标注了@MappedSuperclass的类的话,他将能够使用@AttributeOverride或@AttributeOverrides注解重定义其父类(不管是不是实体类)的属性映射到数据库表中的字段。
好比能够重定义字段名或长度等属性,使用@AttributeOverride中的子属性@Column进行具体的定义。