通過前面幾篇文章,介紹了關聯對映的一些概念。在實際應用中,關聯對映用到的最多。除此之外,還會較多的用到本文講到的繼承對映。
實現繼承對映,主要有三種策略:單錶繼承、具體表繼承和類表繼承。
單錶繼承——每棵繼承樹使用乙個表;
具體表繼承——每乙個類分別使用乙個表;
類表繼承——每個具體類分別使用乙個表。
看下圖整合結構:pig和bird都屬於animal,並且pig和bird都分別有自己特有的屬性。分下使用三種繼承對映對它進行實現。
繼承對映無論採用三種策略中的哪一種,實體類均是一樣的。子類繼承父類animal,並各自擁有各自的屬性。這裡不做過多介紹。
1、每棵繼承樹使用一張表的對映
此種對映方式,在資料庫中,只生成乙個表。此外,表中會多乙個鑑別字段:
對映方式:
<?xml version="1.0"?>顯然,該種策略,對少量資料的查詢有著得天獨厚的優勢,只有一張表,節約查詢時間,簡單易行。而缺點就是存在冗餘字段,而且面對大資料量,就會顯得有些吃力。
2、每個類一張表使用一張表的對映
該種對映方式,對映的結果,有幾個類,就會生成幾個表。因此,在此例中會生成三個表:
對映方式:
<?xml version="1.0"?>該種對映方式不存在資料冗餘,但是每次查詢,最少查詢兩張表。
3、每個具體類一張表的對映
本例中存在兩個具體類,即會對映成兩張表:
對映方式:
<?xml version="1.0"?>每個具體類一張表對映,不能採用自增的方式生成主鍵。原因就是增加乙個pig,然後在增加乙個bird的時候,可能出現重複主鍵。
總結一下:
每個繼承樹一張表優點是:查詢速度快,效率高;缺點是:存在大量冗餘,而且在查詢的資料特別大時,不適合採用該種方式。
每個類一張表優點是:層次清楚,無冗餘;缺點是:類的層次多,並且有乙個類就需要有乙個表,導致會產生很多表。而且,查詢時關聯的表太多,影響查詢速度。
每個具體類一張表優點是:層次清楚,無冗餘;缺點是:使用自增主鍵方式會產生重複逐漸。
總之,最好的方式就是根據具體情況,酌情選擇。
Hibernate 繼承對映
繼承對映是將乙個繼承體系對映到資料庫表裡面,繼承實現的三種策略 單錶繼承,每顆類繼承樹使用一張表 一張表 具體表繼承,每個子類一張表 三張表,animal pig bird 類表繼承,每個具體類一張表 兩張表,策略描述 單錶繼承,效率較高,只需查一張表就好,需要新增乙個標記欄位來標記是哪個子類,而且...
hibernate繼承對映
每棵繼承樹對映成一張表 因為類繼承樹肯定是對應多個類,要把多個類的資訊存放在一張表中,必須有某種機制來區分哪些記錄是屬於哪個類的。這種機制就是,在表中新增乙個字段,用這個欄位的值來進行區分。用hibernate實現這種策略的時候,有如下步驟 父類用普通的標籤定義 在父類中定義乙個discrimina...
Hibernate 繼承關係對映
繼承關係對映 繼承是物件導向程式設計中乙個很重要的特徵,在做物件導向的分析與設計時,經常會設計出具體繼承關聯對映的持久化類。如何把這些持久化類之間的繼承關係對映到關聯式資料庫上的問題已解決。繼承在物件模型中是is a的關係,但在關係模型中,實體之間只有has a的關係,也就是說,繼承在物件模型和關係...