3つ目の選択肢は、継承階層の具象クラスのみをテーブルにマッピングすることです (the table-per-concrete-class 戦略)。それぞれのテーブルは継承の状態を含めすべてのクラスの永続状態を定義します。 Hibernate ではその様な継承階層が必ずしも必要ではありません。単純にそれぞれのクラスを、別々の <class> 宣言を使ってマッピングすることができます。しかしポリモーフィックな関連 (例えば階層のスーパークラスへの関連) を使いたいなら、 <union-subclass> マッピングを使う必要があります。
<union-subclass
name="ClassName"
table="tablename"
proxy="ProxyInterface"
lazy="true|false"
dynamic-update="true|false"
dynamic-insert="true|false"
schema="schema"
catalog="catalog"
extends="SuperclassName"
abstract="true|false"
persister="ClassName"
subselect="SQL expression"
entity-name="EntityName"
node="element-name">
<property .... />
.....
</union-subclass>
name:サブクラスの完全修飾されたクラス名。
table :サブクラステーブルの名前。
proxy (オプション): 遅延初期化プロキシに使用するクラスやインターフェースを指定します。
lazy (オプション、デフォルトは true ): lazy="false" とすると、遅延フェッチが使用できません。
このマッピング戦略では識別カラムやキーカラムは必要ありません。
継承のマッピングに関する情報は 章 9. 継承マッピング を参照してください。