天天看點

Hibernate 5 @Entity 如何 extends 另外一個類

在實際項目設計中,我們可以希望在 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進行具體的定義。

Hibernate 5 @Entity 如何 extends 另外一個類
https://www.cwiki.us/display/HIBERNATE/questions/57938957