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ではクラスの継承関係に併せてサブクラスも取得するが、これをテーブルに対しても自動的に行ってくれるらしい。後でチェックすることにしてこれでいってみるか。