JPA繼承註解:
JPA的繼承註解一般有四種--
- @MappedSuperclass 這個註解應用的場景是父類不對應任何單獨的表,多個子類共用相同的屬性
- @Inheritence 此註解應用於根實體類以定義繼承策略。 如果沒有使用此註釋定義策略類型,那麼它遵循單表戰略。
- @DiscriminatorColumn 鑑別器屬性將一個實體與另一個實體區分開來。 因此,該註釋用於提供鑑別器列的名稱。 僅需要在根實體類上指定此註釋。
- @DiscriminatorValue 此註釋用於指定表示特定實體的值的類型。 需要在子實體類中指定此註釋。
這裏先說一下一下@MappedSuperclass
@MappedSuperclass註解使用在父類上面,是用來標識父類的作用
@MappedSuperclass標識的類表示其不能映射到數據庫表,因爲其不是一個完整的實體類,但是它所擁有的屬性能夠映射在 其子類對用的數據庫表中
@MappedSuperclass標識得類不能再有@Entity或@Table註解 但是可以使用@Id 和@Column註解
JPA繼承註解:
- 單表策略
- 加入策略
- 每表每類策略
單表策略:
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
查詢父類關聯的表 在查詢父類的時候 所有子類表中字段全部查詢出來
連接策略:
@Inheritance(strategy=InheritanceType.JOINED)
在連接策略中,爲每個實體類生成一個單獨的表。 每個表的屬性都與主鍵連接。 它消除了字段字重複的可能性。但是父類中除了主鍵的的其他字段 並不會在子表中查詢出來
按類表策略:
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
在按類表策略中,爲每個子實體類生成一個單獨的表。 與連接策略不同,在按類表策略中不會爲父實體類生成單獨的表