三種方法實現表的繼承。
1.student和teacher放在乙個表中。
2.每個類分別一張表。
3.共用屬性乙個表,每個子類一張表。
一、第一種實現方式。
student的屬性,teacher的屬性放在乙個表中,用乙個字段「fenlei」來區分是學生和老師。
person類
@entity
@inheritance(strategy=inheritancetype.single_table)
@discriminatorcolumn(name="discriminator", discriminatortype=discriminatortype.string)
@discriminatorvalue("person")
public class person
public void setid(int id)
public string getname()
public void setname(string name) }
2.student類
@entity
@discriminatorvalue("student")
public class student extends person
public void setscore(int score) }
3、teacher類
@entity
@discriminatorvalue("teacher")
public class teacher extends person
public void settitle(string title) }
這種方法的缺點是,student和teacher都各有50多個屬性,這樣**就很亂。
二、第二種實現方式,每個類一張表
父類person,子類student,teacher都各乙個類。父類、子類的id是不能重複的。
1、person類
@entity
@inheritance(strategy=inheritancetype.table_per_class)
@tablegenerator(
name="t_gen",
table="t_gen_table",
pkcolumnname="t_pk",
valuecolumnname="t_value",
pkcolumnvalue="person_pk",
initialvalue=1,
allocationsize=1
)public class person
public void setid(int id)
public string getname()
public void setname(string name) }
2、student類
@entity
public class student extends person
public void setscore(int score) }
3.teacher類
@entity
public class teacher extends person
public void settitle(string title) }
第二種方法的缺點,id不能重複,如果要找乙個id對應的人,就要遍歷所有父表,子表,或者孫表。
第三種方法,在person中存放student和teacher的公共屬性,如id和name;在student和teacher類中各存放自己的特性屬性。
1.person父類
@entity
@inheritance(strategy=inheritancetype.joined)
public class person
public void setid(int id)
public string getname()
public void setname(string name) }
2.student類
@entity
public class student extends person //person p = person(load(1));
public void setscore(int score) }
3.teacher類
@entity
public class teacher extends person
public void settitle(string title) }
Hibernate 繼承對映
繼承對映是將乙個繼承體系對映到資料庫表裡面,繼承實現的三種策略 單錶繼承,每顆類繼承樹使用一張表 一張表 具體表繼承,每個子類一張表 三張表,animal pig bird 類表繼承,每個具體類一張表 兩張表,策略描述 單錶繼承,效率較高,只需查一張表就好,需要新增乙個標記欄位來標記是哪個子類,而且...
hibernate繼承對映
每棵繼承樹對映成一張表 因為類繼承樹肯定是對應多個類,要把多個類的資訊存放在一張表中,必須有某種機制來區分哪些記錄是屬於哪個類的。這種機制就是,在表中新增乙個字段,用這個欄位的值來進行區分。用hibernate實現這種策略的時候,有如下步驟 父類用普通的標籤定義 在父類中定義乙個discrimina...
Hibernate 繼承關係對映
繼承關係對映 繼承是物件導向程式設計中乙個很重要的特徵,在做物件導向的分析與設計時,經常會設計出具體繼承關聯對映的持久化類。如何把這些持久化類之間的繼承關係對映到關聯式資料庫上的問題已解決。繼承在物件模型中是is a的關係,但在關係模型中,實體之間只有has a的關係,也就是說,繼承在物件模型和關係...