關係模型如下:
對映檔案如下:
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...