[Hibernate]パラダイムミスマッチ・継承の問題の対応(1テーブルで管理する場合)
Javaのクラス図
DBのER図
DB上は請求を一つのテーブルにしたいとする。(joinが重いから)
この場合のマッピングは、以下のようにdiscriminatorとsubclassを利用して実現できる。
・Billing.hbm.xml
<!-- 識別子のマッピング--> <discriminator type="string"> <column name="billing_details_type"></column> </discriminator> <property name="text" /> <property name="amount" /> <subclass name="hoge.package.CreditCard" discriminator-value="CREDIT_CARD"> <property name="number" column="credit_number_"></property> <property name="month" column="credit_month"></property> <property name="year" column="credit_year"></property> </subclass> <subclass name="hoge.package.Bank" discriminator-value="BANK_ACCOUNT"> <property name="account" column="bank_account"></property> </subclass>
discriminatorに指定したカラムに、指定したdiscriminator-valueの値が保存される。
(CreditCardエンティティならばCREDIT_CARD、Bankエンティティ)