首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate 註解教程(七):繼承映射策略詳解

     編輯:Java 相關知識

EJB 3.0 支持的三種繼承映射策略

1. 每類一表

註解:父類 @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

特點:每個實體類對應一張表,子類表包含父類所有字段,無關聯關係。

create table A (id integer not null auto_increment, aname varchar(255), primary key (id))
create table B (id integer not null, aname varchar(255), bname varchar(255), primary key (id))
create table C (id integer not null, aname varchar(255), cname varchar(255), primary key (id))

2. 單表策略

註解:父類 @Inheritance(strategy=InheritanceType.SINGLE_TABLE)

特點:所有類共享一張表,通過鑑別器列區分。默認鑑別器列為 DTYPE,可自定義:

@DiscriminatorColumn(name="mytype", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value="ctype")

插入時生成:insert into A (aname, cname, mytype) values (?, ?, 'ctype')

3. 連接子類策略

註解:父類 @Inheritance(strategy=InheritanceType.JOINED)

特點:子類表僅含自身字段,通過主鍵關聯父表。默認主鍵關聯,可自定義:

@PrimaryKeyJoinColumn(name="bid")
-- 生成: create table B (bname varchar(255), bid integer not null, primary key (bid))

限制:不能關聯父類非主鍵字段,列類型必須兼容。

4. 非持久化父類

註解:父類 @MappedSuperclass

特點:父類不生成表,字段合併到子類表中。支持 @AttributeOverride 覆蓋映射。

策略選擇建議

  • 單表策略:查詢性能最好,但稀疏列多
  • 連接策略:規範化程度高,查詢需連表
  • 每類一表:避免稀疏列,但多態查詢需 UNION
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved