Hibernateでの継承

いよいよもってしてORマッピングの中でも重要な継承の実現に突入。今までの調査で面倒くさいからやっていなかったけど、本設計に入って継承が出てくるので、というか継承がないなんてアリエナイので。調査をしてみる。


ORマッピングによる継承の方法を調べてみると、

  • table per class hierarchy

まずスーパークラスもサブクラスも同じテーブルで扱うという方法。この方法は日本語でも結構検索サイトが引っ掛かった。しかし、今回の場合はサブクラスそれぞれの属性が大きく異なるため、パフォーマンス的によろしくない。同じhbm.xmlファイルに全部のクラスのフィールドを書くのも面倒くさいしね。却下。

  • table per subclass

じゃあということでテーブルを分ける方法の1つ。だが、hbm.xmlファイルにまとめるのは一緒のようなのでこれもイマイチ。XMLのインクルードを使えば少しはマシになりそうだな。試してみよう。
ところが、別個のファイルでjoined-sublcassはできたのだが、サブクラス側へのmeny-to-meny関係が綺麗にマッピングされてくれない。サブクラスはクラスじゃないんですか?

  • table per concrete class

これを試してみようと思ってみる。
しかし、これってどういうことかというとhibernateではクラスの継承関係に併せてサブクラスも取得するが、これをテーブルに対しても自動的に行ってくれるらしい。後でチェックすることにしてこれでいってみるか。