3.4.4. 継承
SINGLE_TABLE は非常に強力な方針ですが、レガシーシステムの場合は、識別子カラムを追加できません。このために、Hibernate は識別子式の表記を導入しました。
@DiscriminatorFormula
は @DiscriminatorColumn
を置き換えるものであり、識別子解決のために SQL 断片を式として使用します (専用カラムを持つ必要はありません)。
@Entity
@DiscriminatorFormula("case when forest_type is null then 0 else forest_type end")
public class Forest { ... }
デフォルトでは、最上位エンティティを問い合わせる場合に、Hibernate は識別子カラムに制限句を割り当てません。これは、このカラムに階層にマップされない値が含まれる場合 (
@DiscriminatorValue
を使用) に、不便になることがあります。これを回避するには、@ForceDiscriminator
を使用します (クラスレベル、@DiscriminatorColumn
の次)。Hibernate はエンティティのロード時に利用可能な値をリストします。
JOINED 継承方針のサブクラステーブルに対して Hibernate により生成された外部キー名を定義できます。
@Entity @Inheritance(strategy = InheritanceType.JOINED) public abstract class File { ... } @Entity @ForeignKey(name = "FK_DOCU_FILE") public class Document extends File {
Document
テーブルから File
テーブルへの外部キーには FK_DOCU_FILE
という名前が付けられます。