8.6. より複雑な関連マッピング
より複雑な関連結合は 極めて 稀です。Hibernate は、マッピングドキュメントに埋め込まれたSQL フラグメントを使用することで、さらに複雑な状況を扱うことができます。例えば、
accountNumber 、effectiveEndDate 、 effectiveStartDate カラムを持つ account (口座)情報の履歴を扱うテーブルは、以下のようにマッピングします。
そして、関連を 現時点の インスタンス (
effectiveEndDate が null であるもの)にマッピングします。以下のようになります:
さらに複雑な例では、
Employee(従業員) と Organization(組織) 間の関連が Employment(雇用) テーブルで保持される場合を想像してください。このテーブルには雇用データの履歴がすべて含まれます。すると従業員の 最も最近の 雇用者を表す関連 (最も最近の startDate を持つもの)は、このようにマッピングできます:
この機能で創造性、柔軟性の幅が出すことができますが、このような場合、普通は HQL や criteria クエリを使う方がより実践的です。