Hibernate的繼承對映

2022-08-17 01:45:10 字數 1425 閱讀 6545

何為繼承對映:

繼承對映:對於物件導向的程式語言而言,繼承和多型是兩個最基本的概念。hibernate 的繼承對映可以理解持久化類之間的繼承關係。例如:人和學生之間的關係。學生繼承了人,可以認為學生是乙個特殊的人,如果對人進行查詢,學生的例項也將被得到。

繼承對映的分類:hibernate支援三種繼承對映策略:

使用 subclass 進行對映:將域模型中的每乙個實體物件對映到乙個獨立的表中,也就是說不用在關係資料模型中考慮域模型中的繼承關係和多型。(資料看起來會很模糊,因為子類和父類的資料都放在同一張表)

使用 joined-subclass 進行對映:對於繼承關係中的子類使用同乙個表,這就需要在資料庫表中增加額外的區分子類型別的字  段。(子類和父類共有的資料放在父類表,那子類特有的資料放在子類表,但是如果單單看子類表時 是不是無法獲得全部資料 吖,)

使用 union-subclass 進行對映:域模型中的每個類對映到乙個表,通過關係資料模型中的外來鍵來描述表之間的繼承關係。這也    就相當於按照域模型的結構來建立資料庫中的表,並通過外來鍵來建立表之間的繼承關係。(子類和父類的資料都分別存放在子類和父類的表中,這樣存放資料是不是簡單明瞭吖,所以一般推薦使用這個)

但是在實際的開發中,我們一般不推薦使用繼承對映,因為表與表之間的關係,不應該那麼複雜,這樣很難維護

所以我們當做了解知識即可,有時候可能也需要用到

那這種繼承對映是怎樣實現的呢??(person與student這兩者就是繼承的關係,以這兩個來舉例)

i subclass實現

1新建person類和student類

**如下:

package com.atguigu.hibernate.subclass;

public class person

public void setid(integer id)

public string getname()

public void setname(string name)

}student:

package com.atguigu.hibernate.subclass;

public class student extends person

public void setid(integer id)

public string getschool()

public void setschool(string school)

}1生成父類的.hbm.xml檔案,也就是生成person.hbm.xml檔案,在這檔案中配置discriminator和subclass

**如下:

ii joined-subclass(就是子類與父類相同的字段放在父類,子類特有的字段放在子類,並且子類的主鍵要根據父類生成)

iii union-subclass(子類和父類的字段都分開放,但是主鍵的生成方式不能使identity,)

Hibernate 繼承對映

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

hibernate繼承對映

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

Hibernate的繼承對映

關係模型如下 對映檔案如下 package com.nnngu name animal table t animal lazy false name id class native id column type type string name name name name pig discrimi...