<discriminator> 要素は、 table-per-class-hierarchy マッピング戦略を使うポリモーフィックな永続化に必要であり、テーブルの識別カラムを定義します。識別カラムは、ある行に対して永続層がどのサブクラスをインスタンス化するかを伝えるマーカー値を含んでいます。以下のような型に制限されます: string , character , integer, byte , short , boolean , yes_no , true_false.
<discriminator
column="discriminator_column"
type="discriminator_type"
force="true|false"
insert="true|false"
formula="arbitrary sql expression"
/>
column(オプション - デフォルトは class ): 識別カラムの名前。
type (オプション - デフォルトは string ): Hibernate の型を示す名前。
force (オプション - デフォルトは false ): ルートクラスのすべてのインスタンスを検索する場合であっても、 Hibernate が使用できる識別カラムの指定を「強制」します。
insert (オプション - デフォルトは true ): もし識別カラムがマッピングする複合識別子の一部ならば、 false と設定してください。 (Hibernate に SQL の INSERT 内のカラムを含ませないよう伝えます。)
formula (オプション) 型が評価されるときに実行される任意の SQL 式。コンテンツベースの識別を可能にします。
識別カラムの実際の値は、 <class> と <subclass> 要素の discriminator-value 属性で指定されます。
永続クラスへマッピングされない「余分な」識別値を持つ行がテーブルにあれば、(そのときに限り) force 属性は有効です。ただし、普通はそういうことはありません。
formula 属性を使うと、行の型を評価するために任意の SQL 式を宣言できます:
<discriminator
formula="case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end"
type="integer"/>