jpa實體繼承問題

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)

在按類表策略中,爲每個子實體類生成一個單獨的表。 與連接策略不同,在按類表策略中不會爲父實體類生成單獨的表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章