Hibernate的繼承對映

2021-08-17 11:44:08 字數 2251 閱讀 3728

關係模型如下:

對映檔案如下:

package="com.nnngu">

name="animal"

table="t_animal"

lazy="false">

name="id">

class="native"/>

id>

column="type"

type="string"/>

name="name"/>

name="***"/>

name="pig"

discriminator-value="p">

name="weight"/>

subclass>

name="bird"

discriminator-value="b">

name="height"/>

subclass>

class>

說明:因為類繼承樹肯定是對應多個類,要把多個類的資訊存放在一張表中,必須有某種機制來區分哪些記錄是屬於哪個類的。這種機制就是,在表中新增乙個字段,用這個欄位的值來進行區分。

用hibernate實現這種策略的時候,有如下步驟:

1、父類用普通的標籤定義

2、在父類中定義乙個discriminator,即指定這個區分的字段的名稱和型別

如:

3、子類使用標籤定義,在定義subclass的時候,需要注意如下幾點:

關係模型如下:

對映檔案如下:

package="com.nnngu">

name="animal"

table="t_animal">

name="id">

class="native"/>

id>

name="name"/>

name="***"/>

name="pig"

table="t_pig">

column="pid"/>

name="weight"/>

joined-subclass>

name="bird"

table="t_bird">

column="bid"/>

name="height"/>

joined-subclass>

class>

說明:這種策略是使用joined-subclass標籤來定義子類的。父類、子類,每個類都對應一張資料庫表。

在父類對應的資料庫表中,實際上會儲存所有的記錄,包括父類和子類的記錄;在子類對應的資料庫表中,這個表只定義了子類中所特有的屬性對映的字段。子類與父類,通過相同的主鍵值來關聯。

實現這種策略的時候,有如下步驟:

1、父類用普通的標籤定義即可

2、父類不再需要定義discriminator字段

3、子類用標籤定義,在定義joined-subclass的時候,需要注意如下幾點:

關係模型如下:

對映檔案如下:

package="com.nnngu">

name="animal"

table="t_animal"

abstract="true">

name="id">

class="assigned"/>

id>

name="name"/>

name="***"/>

name="pig"

table="t_pig">

name="weight"/>

union-subclass>

name="bird"

table="t_bird">

name="height"/>

union-subclass>

class>

說明:這種策略是使用union-subclass標籤來定義子類的。每個子類對應一張表,而且這個表的資訊是完備的,即包含了所有從父類繼承下來的屬性對映的字段(這就是它跟joined-subclass的不同之處,joined-subclass定義的子類的表,只包含子類特有屬性對映的字段)。

實現這種策略的時候,有如下步驟:

1、父類用普通標籤定義即可

2、子類用標籤定義,在定義union-subclass的時候,需要注意如下幾點:

注意:在儲存物件的時候id不能重複(不能使用資料庫的自增方式生成主鍵)

Hibernate 繼承對映

繼承對映是將乙個繼承體系對映到資料庫表裡面,繼承實現的三種策略 單錶繼承,每顆類繼承樹使用一張表 一張表 具體表繼承,每個子類一張表 三張表,animal pig bird 類表繼承,每個具體類一張表 兩張表,策略描述 單錶繼承,效率較高,只需查一張表就好,需要新增乙個標記欄位來標記是哪個子類,而且...

hibernate繼承對映

每棵繼承樹對映成一張表 因為類繼承樹肯定是對應多個類,要把多個類的資訊存放在一張表中,必須有某種機制來區分哪些記錄是屬於哪個類的。這種機制就是,在表中新增乙個字段,用這個欄位的值來進行區分。用hibernate實現這種策略的時候,有如下步驟 父類用普通的標籤定義 在父類中定義乙個discrimina...

Hibernate的繼承對映

關係模型如下 對映檔案如下 說明 因為類繼承樹肯定是對應多個類,要把多個類的資訊存放在一張表中,必須有某種機制來區分哪些記錄是屬於哪個類的。這種機制就是,在表中新增乙個字段,用這個欄位的值來進行區分。用hibernate實現這種策略的時候,有如下步驟 1 父類用普通的標籤定義 2 在父類中定義乙個d...