32. 3.6.1 継承方式(1) 例題
• 以下の例題をもとにマッピング方法を説明
<<エンティティ>>
Item
-id : Long
-title : String
<<エンティティ>> <<エンティティ>>
Book CD
-isbn : String -musicCompany : String
2012/4/24 Beginning JavaEE6 勉強会(2) 32
33. 3.6.1 継承方式(2)
クラス階層ごとに1つのテーブル
• 全部まとめて1つのテーブル
省略可能 どのクラスのインスタンスかを
@Entity
@Inheritance(strategy =
識別するためのカラム「CT」
InheritanceType.SINGLE_TABLE)
※規約では「DTYPE」
@DiscriminatorColumn(name = "ct",
discriminationType = DiscriminatorType.CHAR)
@DiscriminatorValue("I")
public class Item { @Entity
@Id @DiscriminatorValue("B")
protected Long id; public class Book extends Item {
protected String title; private String isbn;
} }
Itemクラスの識別は「I」
※他のクラスも同様 @Entity
※規約ではクラス名の「Item」 @DiscriminatorValue("C")
public class CD extends Item {
private String musicCompany;
}
ID CT TITLE ISBN MUSICCOMPANY
1 I 1_t
2 B 2_t 2_I
3 C 3_t 3_M
2012/4/24 Beginning JavaEE6 勉強会(2) 33
34. 3.6.1 継承方式(3)
結合サブクラス
• クラス間の差分の属性のみを別テーブル
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Item {
@Id
protected Long id; 結合サブクラス方式でマッピング
protected String title;
}
@Entity @Entity
public class Book extends Item { public class CD extends Item {
private String isbn; private String musicCompany;
} }
BOOK ITEM CD
+#ID bigin +ID bigin +#ID bigin
ISBN t DTYPE t MUSICCOMPANY t
Strin TITLE Strin Strin
g g g
Strin
2012/4/24 Beginning g
JavaEE6 勉強会(2) 34
35. 3.6.1 継承方式(4)
具象クラスごとのテーブル
• 継承する属性も含め、クラスごとにテーブル
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Item {
@Id
protected Long id; 具象クラスごとの方式でマッピング
protected String title;
}
@Entity @Entity
public class Book extends Item { public class CD extends Item {
private String isbn; private String musicCompany;
} }
3クラス通してIDが一意となっている
BOOK ITEM CD
+ID bigin +ID bigin +#ID bigin
TITLE t TITLE t TITLE t
ISBN Strin Strin MUSICCOMPANY Strin
g g g
2012/4/24 Strin Beginning JavaEE6 勉強会(2) Strin
35
37. 3.6.2 継承階層に含まれるクラスの種類(2)
マップドスーパークラス
• 継承先のクラスにマッピング情報を引き継ぎた
い場合に利用
@MappedSuperclass
@Inheritance(strategy = InheritanceType.JOINED)
public class Item {
@Id
protected Long id; @Entity
protected String title; public class Book extends Item {
} private String isbn;
}
IDやTITLEカラムが作成される
BOOK
+ID bigin
ただしITEMは作成されない
TITLE t
ISBN Strin
g
Strin
2012/4/24
g Beginning JavaEE6 勉強会(2) 37