daybreaksnow's diary

私を私と呼びたい

[Hibernate]パラダイムミスマッチ・継承の問題の対応(1テーブルで管理する場合)

Javaのクラス図
f:id:daybreaksnow:20130118220643p:plain

DBのER図
f:id:daybreaksnow:20130118220809p:plain

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エンティティ)