3.2.4.2. クラス階層ごとの単一テーブル
すべてのスーパークラスおよびサブクラスのすべてのプロパティは同じテーブルにマップされ、インスタンスは特殊な判別子カラムによって区別されます。
@Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn( name="planetype", discriminatorType=DiscriminatorType.STRING ) @DiscriminatorValue("Plane") public class Plane { ... } @Entity @DiscriminatorValue("A320") public class A320 extends Plane { ... }
Plane
はスーパークラスであり、継承方針 InheritanceType.SINGLE_TABLE
を定義します。また、@DiscriminatorColumn
アノテーションを使用して判別子カラムを定義し、判別子カラムは判別子タイプを定義することもできます。最後に、@DiscriminatorValue
アノテーションは階層のクラスを区別するために使用される値を定義します。これらすべての属性は適切なデフォルトの値を持ちます。判別子カラムのデフォルト名は、 DTYPE
です。デフォルトの判別子の値は DiscriminatorType.STRING のエンティティ名 (@Entity.name
で定義済み) です。A320
はサブクラスです。デフォルト値を使用したくない場合にのみ、判別子の値を定義する必要があります。方針と判別子タイプは暗黙的です。
@Inheritance
と @DiscriminatorColumn
はエンティティ階層の最上位で定義する必要があります。