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
joined-subclass
union-subclass
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
>