在實際項目設計中,我們可以希望在 JPA 中定義 @Entity 表。
但是在這個 @Entity 類中,我們希望 extends 另外一個類,在另外一個類中我們可以把一些通用的屬性設定到裡面。
例如:
public class Covid19Current extends DataObject implements java.io.Serializable {
}
那麼我們應該在 DataObject 添加什麼注解?
需要在 DataObject 中添加 @MappedSuperclass 注解。
可以定義成如下:
@MappedSuperclass
public abstract class DataObject {
@MappedSuperclass注解隻能标準在類上:@Target({java.lang.annotation.ElementType.TYPE})
标注為@MappedSuperclass的類将不是一個完整的實體類,他将不會映射到資料庫表,但是他的屬性都将映射到其子類的資料庫字段中。
标注為@MappedSuperclass的類不能再标注@Entity或@Table注解,也無需實作序列化接口。
但是如果一個标注為@MappedSuperclass的類繼承了另外一個實體類或者另外一個同樣标注了@MappedSuperclass的類的話,他将可以使用@AttributeOverride或@AttributeOverrides注解重定義其父類(無論是否是實體類)的屬性映射到資料庫表中的字段。
比如可以重定義字段名或長度等屬性,使用@AttributeOverride中的子屬性@Column進行具體的定義。
