Hibernate 繼承關係對映

2021-06-18 22:44:55 字數 1648 閱讀 3422

繼承關係對映

繼承是物件導向程式設計中乙個很重要的特徵,在做物件導向的分析與設計時,經常會設計出具體繼承關聯對映的持久化類。如何把這些持久化類之間的繼承關係對映到關聯式資料庫上的問題已解決。繼承在物件模型中是is a的關係,但在關係模型中,實體之間只有has a的關係,也就是說,繼承在物件模型和關係模型上是不匹配的。所幸的是,hibernate提供了3種常用的繼承對映方案。

舉例講解這3種繼承方案的使用:筆者在開發乙個****時就涉及繼承對映的問題,****中的歌手可分為單人歌手、樂隊組合等。

1)  singer類

/**歌手抽象類*/

public abstract class singer//無參構造方法

//以下為省略的所有的getter()與setter()方法

}singlesinger類

/**單人歌手實體類*/

public calss singlesinger extends singer//無參構造方法

//以下省略為所有屬性的getter()和setter()方法

}bands類

/**樂隊組合實體類*/

public class bands extends singer//無參構造方法

//以下為所有屬性的getter()和setter()方法

}1.       整個繼承層次一張表

把整個繼承層次的多個類的資訊存放到一張表裡。需要在表中新增乙個特定的字段,用這個欄位的值來進行區分哪些記錄是屬於哪個類的。

對應的對映檔案singer.hbm.xml

<?xml version=」1.0」 encoding=」utf-8」?>

這個對映方案在效能和簡單性方面很好,在多型和非多型的查詢上也表現的很好,是繼承對映中使用比較廣泛的方案。但這個對映檔案也由它的缺點:子類中屬性的值必須是可以為空的;這種對映方案的關係模型表設計也違背了第三正規化。

2.       每個子類一張表

這種方案是把物件模型上的繼承關係表示為關係模型中的外來鍵關聯,繼承結構中的每個類和子類都有一張對應的資料庫表。

對應的對映檔案singer.hbm.xml內容如下:

<?xml version=」1.0」 encoding=」utf-8」?>

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

3.       每個具體類一張表

這種策略是針對每個具體類對應一張表,而且這個表的資訊是完備的,它從包含所有從父類繼承下來的屬性對映的字段和自己的屬性應的字段。

相應的對映檔案singer.hbm.xml如下:

<?xml version=」1.0」 encoding=」utf-8」?>.

繼承對映最常用的方案就是以上介紹的三種,在實際開發中,怎麼選擇合適的方案。筆者根據自己的工作經驗,給讀者提供一些經驗。

如果不需要多型查詢:使用每個具體類一張表

一定要使用多型查詢:子類中的屬性相對較少,使用每個繼承層次一張表

子類中的屬性較多,使用每個子類一張表

簡單的問題一般選擇每個繼承層次一張表,複雜案例一般選擇每個子類一張表

SSH 基礎 Hibernate繼承關係對映

繼承關係大家應該都很清楚,那麼對於hibernate對於繼承來說是如何對映的呢?下面就介紹一下hibernate繼承類對映到表的三種方式 1 一棵繼承樹對映一張表。2 每個子類各自對映表。3 繼承樹的每個類各自對映表。直接上圖,如下圖所示。2 每個子類一張表。3 每個類一張表 子類 父類 對比 以上...

hibernate 關係對映

color red hibernate 多對一對映 color 關聯對映的本質 將關聯關係對映到資料庫,關聯關係在物件模型域中體現為乙個或多個引用 標籤會在 多 的一端新增乙個外來鍵,指向 一 的一端,這個外來鍵是由 中的column的屬性定義的,如果忽略這個屬性,預設建立的外來鍵與實體類的屬性名相...

Hibernate 對映關係

對映關係通俗點來說 address實體類 不用配置 user實體類 編寫配置 public class user student實體類 不用配置 班級實體類 編寫配置 public class clazz.student實體類 不用配置 課程實體類 編寫配置 public class course....