3.2.4. 継承のマッピング
EJB3 は 3 つのタイプの継承をサポートします。
- クラス方針ごとのテーブル: Hibernate の <union-class> エレメント
- クラス階層ごとに単一のテーブル方針 (Single Table per Class Hierarchy Strategy): Hibernate の <subclass> エレメント
- 結合サブクラス方針 (Joined Subclass Strategy): Hibernate の <joined-subclass> エレメント
選択された方針は、
@Inheritance
アノテーションを使用して階層の最上位のエンティティのクラスレベルで宣言されます。
注記
インターフェースのアノテーションは現在サポートされていません。
3.2.4.1. クラスごとのテーブル
この方針には、EJB3 仕様、Hibernate リファレンスドキュメンテーション、Hibernate in Action などで説明された多くの欠点 (特に、ポリモーフィックなクエリや関係に関する問題) があります。Hibernate では、
SQL UNION
クエリを使用してこの方針を実装することによりこれらのほとんどの問題を回避しています。
@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Flight implements Serializable {
この方針は 1 対多の関係 (双方向である場合) をサポートします。この方針は
IDENTITY
ジェネレータ方針をサポートしません。ID は複数のテーブルで共有する必要があります。したがって、この方針を使用する場合は、AUTO
と IDENTITY
を使用しないでください。