Hibernate實(shí)體對(duì)象繼承的三種方法
Hibernate實(shí)體對(duì)象繼承的方法
hibernate繼承策略總共有三種,一種是共用一張表;一種是每個(gè)類一張表,表里面儲(chǔ)存子類的信息和父類的信息;還有一種是通過(guò)表連接的方式,每個(gè)類都有一張表,但是子類對(duì)應(yīng)的表只保存自己的信息,父類對(duì)應(yīng)的表保存父類的信息,它們之間通過(guò)子類表和父類表的關(guān)聯(lián)來(lái)獲取所有的信息。
第一種方式,即共用一張表:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)//表示區(qū)分不同的對(duì)象的字段名
@DiscriminatorValue("person")//用來(lái)表示該對(duì)象是何種對(duì)象的,即區(qū)分器
public class Parent {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
@DiscriminatorValue("child1")
public class Child1 extends Parent {
private String email;
public String getEmail() {
return title;
}
public void setEmail(String email) {
this.email = email;
}
}
@Entity
@DiscriminatorValue("child2")
public class Child2 extends Parent {
private String address;
public String getAddress() {
return score;
}
public void setAddress(String address) {
this.address = address;
}
}
這種情況父類和所有子類的所有信息都保存在同一張表里面,通過(guò)我們指定的@DiscriminatorColumn對(duì)應(yīng)的@DiscriminatorValue來(lái)區(qū)別不同的類。 當(dāng)沒(méi)有指定@DiscriminatorValue的時(shí)候?qū)⑹褂萌惷麃?lái)作為DiscriminatorValue。
第二種策略是每個(gè)類一張表,保存所有信息:
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@TableGenerator( //一個(gè)類一張表,最重要的是要保證它們的id由一個(gè)生成器產(chǎn)生,@TableGenerator就是為了控制這個(gè)的
name="t_gen",
table="t_gen_table",
pkColumnName="t_pk",
valueColumnName="t_value",
pkColumnValue="person_pk",
initialValue=1,
allocationSize=1
)
public class Parent {
private int id;
private String name;
@Id
@GeneratedValue(generator="t_gen", strategy=GenerationType.TABLE)//這個(gè)就是用表生成器生成的,用同一個(gè)生成器就可以控制它們的id不重復(fù)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
public class Child2 extends Parent {
private String address;
public String getAddress() {
return score;
}
public void setAddress(String address) {
this.address = address;
}
}
@Entity
public class Child1 extends Parent {
private String email;
public String getEmail() {
return title;
}
public void setEmail(String email) {
this.email = email;
}
}
弟三種方式是采用表連接的方式:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Parent {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
public class Child2 extends Parent {
private String address;
public String getAddress() {
return score;
}
public void setAddress(String address) {
this.address = address;
}
}
@Entity
public class Child1 extends Parent {
private String email;
public String getEmail() {
return title;
}
public void setEmail(String email) {
this.email = email;
}
}
采用表連接的情況,還是每個(gè)類擁有自己的一張表,只是子類對(duì)應(yīng)的表只保存子類的信息,其父類的信息由父類的表保存。當(dāng)需要獲取子類的完整信息時(shí)通過(guò)表連接的方式連接子類的表和父類的表獲取對(duì)應(yīng)信息??梢栽谧宇惖谋砩蠘?biāo)注@PrimaryKeyJoinColumn(name="foreignKeyName")指明子類表相對(duì)于父類表外鍵的名稱。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
jsp+servlet實(shí)現(xiàn)文件上傳與下載功能
這篇文章主要為大家詳細(xì)介紹了jsp+servlet實(shí)現(xiàn)文件上傳與下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
jsp自定義標(biāo)簽之ifelse與遍歷自定義標(biāo)簽示例
這篇文章主要介紹了jsp自定義標(biāo)簽之ifelse與遍歷自定義標(biāo)簽,需要的朋友可以參考下2014-03-03
JSP之表單提交get和post的區(qū)別詳解及實(shí)例
這篇文章主要介紹了JSP之表單提交get和post的詳解及實(shí)例的相關(guān)資料,希望通過(guò)本文大家能夠掌握使用get與post的方法,需要的朋友可以參考下2017-09-09
Apache+Servlet+Jsp環(huán)境設(shè)置(下)
Apache+Servlet+Jsp環(huán)境設(shè)置(下)...2006-10-10
Spring MVC之DispatcherServlet詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Spring MVC之DispatcherServlet詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下2017-08-08
JSP 開(kāi)發(fā)之servlet中調(diào)用注入spring管理的dao
這篇文章主要介紹了JSP 開(kāi)發(fā)之servlet中調(diào)用注入spring管理的dao的相關(guān)資料,需要的朋友可以參考下2017-05-05
JBuilder2005實(shí)現(xiàn)重構(gòu)
JBuilder2005實(shí)現(xiàn)重構(gòu)...2006-10-10
JSP實(shí)現(xiàn)客戶信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了JSP實(shí)現(xiàn)客戶信息管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

