잊지 않겠습니다.

NHibernate에서 상속된 model을 지원하는 방법은 총 3가지가 있다.

1. "subclass" 로 하나의 Table에 discriminator column을 지정해서 생성하는 방법
  - discriminator 값으로는 class의 full name이 들어가게 된다.
2. "joined-subclass"로 model의 parent class를 하나의 Table로, 그리고 나머지 model의 property를 묶은 table을 FK로 엮는 방법
3. "union-subclass"로 정규화를 고려하지 않고, 상속된 모든 property를 각각의 table로 구현하는 방법


subclass


01.<!--?xml version="1.0" encoding="utf-8" ?-->
02.<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.First" namespace="NHibernate.First.Models">
03.  <class name="Product">
04.    <id name="Id">
05.      <generator class="guid.comb"></generator>
06.    </id>
07.    <discriminator column="ProductType"></discriminator>   
08.    <property name="Name"></property>   
09.    <property name="Description"></property>
10.    <property name="UnitPrice" not-null="true" type="Currency"></property>
11.  </class>
12.  <subclass name="Book" extends="Product">
13.    <property name="Author"></property>
14.    <property name="ISBN"></property>
15.  </subclass
16.  <subclass name="Movie" extends="Product">
17.    <property name="Director"></property>
18.  </subclass>
19.</hibernate-mapping>


joined-subclass


01.<!--?xml version="1.0" encoding="utf-8" ?-->
02.<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.First" namespace="NHibernate.First.Models">
03.  <class name="Product">
04.    <id name="Id">
05.      <generator class="guid.comb"></generator>
06.    </id>
07.    <property name="Name"></property>   
08.    <property name="Description"></property>
09.    <property name="UnitPrice" not-null="true" type="Currency"></property>
10.  </class>
11.  <joined-subclass name="Book" extends="Product">
12.    <key column="Id"></key>
13.    <property name="Author"></property>
14.    <property name="ISBN"></property>
15.  </joined-subclass>
16.  <joined-subclass name="Movie" extends="Product">
17.    <key column="Id"></key>
18.    <property name="Director"></property>   
19.  </joined-subclass>
20.</hibernate-mapping>

union-subclass


01.<!--?xml version="1.0" encoding="utf-8" ?-->
02.<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.First" namespace="NHibernate.First.Models">
03.  <class name="Product">
04.    <id name="Id">
05.      <generator class="guid.comb"></generator>
06.    </id>
07.    <property name="Name"></property>   
08.    <property name="Description"></property>
09.    <property name="UnitPrice" not-null="true" type="Currency"></property>
10.  </class>
11.  <union-subclass name="Book" extends="Product">   
12.    <property name="Author"></property>
13.    <property name="ISBN"></property>
14.  </union-subclass>
15.  <union-subclass name="Movie" extends="Product">
16.    <property name="Director"></property>   
17.  </union-subclass>
18.</hibernate-mapping>

Posted by Y2K
,