多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 互聯(lián)網(wǎng) > Hibernate 繼承映射

Hibernate 繼承映射

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-11-14 08:02:19 閱讀次數(shù):2725次

原來(lái)我們都是先設(shè)計(jì)http://www.vxbq.cn/db/在進(jìn)行代碼編寫。也就是說(shuō)都是先有http://www.vxbq.cn/db/,才有實(shí)體對(duì)象。但是這類開(kāi)發(fā)思想其實(shí)不符合我們的面向?qū)ο笏枷搿I趺词敲嫦驅(qū)ο笏枷耄棵嫦驅(qū)ο笫?種對(duì)現(xiàn)實(shí)世界了解和抽象的方法。通過(guò)面向?qū)ο蠓绞剑瑢F(xiàn)實(shí)世界的事物抽象成對(duì)象,現(xiàn)實(shí)世界中的關(guān)系抽象成類、繼承。


但是在關(guān)系型http://www.vxbq.cn/db/中的表與表之間的關(guān)系,并沒(méi)有繼承關(guān)系,不能說(shuō)1張表繼承另外一張表,它們之間的關(guān)系只能是關(guān)聯(lián),那末如何將這類繼承關(guān)系的表映照到我們的http://www.vxbq.cn/db/當(dāng)中呢?Hibernate提供了3種基本實(shí)現(xiàn)策略。


例如:有以下表繼承結(jié)構(gòu)體系:


 
1、  每棵類繼承樹(shù)基樹(shù)1張表

該種方案,是將不同的種類動(dòng)物都放在同1張表。請(qǐng)看下面的繼承體系結(jié)構(gòu):



 


由于類繼承樹(shù)肯定是對(duì)應(yīng)多個(gè)類,要把多個(gè)類的信息寄存在1張表中,必須有某種機(jī)制來(lái)辨別哪些記錄是屬于哪一個(gè)類的。這類機(jī)制就是,在表中添加1個(gè)字段,用這個(gè)字段的值來(lái)進(jìn)行辨別。


注意:父類用普通的<class>標(biāo)簽定義 ,在父類中定義1個(gè)discriminator,指定這個(gè)辨別字段的名稱和類型。子類用<subclass>標(biāo)簽定義,其中name屬性是子類的全路徑名。

配置文件實(shí)現(xiàn):


<?xml version="1.0" encoding="UTF⑻"?> <hibernate-mapping package="com.bjpowernode.hibernate"> <class name="Animal" table="t_animal" lazy="false"> <id name="id"> <generator class="native"/> </id> <discriminator column="type" type="string"/> <property name="name"/> <property name="sex"/> <subclass name ="Pig" discriminator-value="p"> <property name="weight"/> </subclass> <subclass name="Bird" discriminator-value="B"> <property name="height"/> </subclass> </class> </hibernate-mapping>

 
2、 每一個(gè)類1張表

 除非將父類定義成抽象的,否則父類也是1張表


 
 
這類策略使用joined-subclass 標(biāo)簽來(lái)定義子類的 。父類、子類、每一個(gè)類都對(duì)應(yīng)1張http://www.vxbq.cn/db/表。在父類對(duì)應(yīng)的http://www.vxbq.cn/db/表中,實(shí)際上會(huì)存儲(chǔ)所有的記錄,包括父類和子類的記錄;在子類對(duì)應(yīng)的http://www.vxbq.cn/db/表中,這個(gè)表只定義了子類中所獨(dú)有的屬性映照的字段。子類與父類,通過(guò)相同的主鍵值來(lái)關(guān)聯(lián)。


注意:

1.父類不再需要定義discriminator字段;

2.子類用<joined-subclass>標(biāo)簽定義,其中name屬性是子類的全路徑名,需要包括1個(gè)key標(biāo)簽,用來(lái)指定子類和父類之間是通過(guò)哪一個(gè)字段來(lái)關(guān)聯(lián)的。

3.Joined-subclass 標(biāo)簽,既可以被class標(biāo)簽所包括(表名了類之間的繼承關(guān)系),也能夠與class標(biāo)簽所平行。當(dāng)joined-subclass標(biāo)簽的定義與class標(biāo)簽平行的時(shí)候,需要在joined-subclass標(biāo)簽中,添加extends屬性,里面的值是父類的全路徑名。

4.子類的其他屬性,像普通類1樣,定義在joined-subclass標(biāo)簽的內(nèi)部。


配置文件:

<?xml version="1.0" encoding="UTF⑻"?> <hibernate-mapping package="com.bjpowernode.hibernate"> <class name="Animal" table="t_animal"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="sex"/> <joined-subclass name="Pig" table="t_pig"> <key column="pid"/> <property name="weight"/> </joined-subclass> <joined-subclass name="Bird" table="t_bird"> <key column="bid"/> <property name="height"/> </joined-subclass> </class> </hibernate-mapping>

 

3、每一個(gè)具體子類1張表


 


這類策略是使用union-subclass標(biāo)簽來(lái)定義子類的。每一個(gè)子類對(duì)應(yīng)1張表,而且這個(gè)表的信息是完備的,即包括了所有從父類繼承下來(lái)的屬性映照字段。(joined-subclass定義的子類的表,只包括子類特有屬性映照字段)。


注意:
1. Union-subclass 標(biāo)簽不再需要包括key標(biāo)簽
2. Union-subclass標(biāo)簽,既可以被class標(biāo)簽所包括(這類包括關(guān)系正是表明子類間的繼承關(guān)系),也能夠與class標(biāo)簽平行。當(dāng)union-subclass標(biāo)簽的 定義域class標(biāo)簽平行的時(shí)候,需要在union-subclass標(biāo)簽中,添加extends屬性,里面的值是父類的全路徑名稱。
3. 子類的其他屬性,像普通類1樣,定義在union-subclass標(biāo)簽的內(nèi)部。

 
配置文件:

<?xml version="1.0" encoding="UTF⑻"?> <hibernate-mapping package="com.bjpowernode.hibernate"> <class name="Animal" table="t_animal"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <property name="sex"/> <union-subclass name="pig" table="t_pig"> <property name="weight"/> </union-subclass> <union-subclass name="Bird" table="t_bird"> <property name="height"/> </union-subclass> </class> </hibernate-mapping>

總結(jié):

Hibernate提供的這3種策略都可以實(shí)現(xiàn)表的繼承映照。在實(shí)際開(kāi)發(fā)中具體使用何種策略,還需要我們進(jìn)行權(quán)衡。例如策略1:效力好,就1張表,但是當(dāng)表的數(shù)量增多時(shí),會(huì)存在大量的冗余字段。策略2:層次清楚,沒(méi)有冗余。但是類的繼承層次越深,關(guān)聯(lián)的表越多。策略3:不能使用自增方案,由于自增,就有可能出現(xiàn)重復(fù)的主鍵,Hibernate的對(duì)象都是通過(guò)session來(lái)管理的,所以主鍵不能重復(fù)。



生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 成人欧美一区二区三区 | 亚洲精品国产一区二区在线 | 国产精品一国产精品免费 | 精品影视网站入口 | 中文字幕一区二区在线播放 | 图片区小说区av区 | 亚洲h视频| 欧美日韩精品乱国产 | 精品一区二区三区在线观看l | 国产精品久久久久久久免费大片 | 国产亚洲欧美在线 | 欧美成人看片一区二区三区尤物 | 五月天欧美激情午夜情 | 在线亚洲欧洲国产综合444 | 一级视频免费观看 | 最近免费字幕高清在线观看 | 老女人在线视频 | 国产成人亚洲精品 | 日韩亚洲国产欧美精品 | 久久久日本精品一区二区三区 | 狠狠干天天爱 | 精品一区二区三区在线观看 | 亚洲精品第四页中文字幕 | 国产中文字幕在线观看 | 久久久久免费精品国产 | 可以免费观看全网 | 美国a视频 | 国产精品视屏 | 午夜老司机免费视频 | 日韩欧美在线观看视频一区二区 | 国产一级做a爰大片免费久久 | 国产午夜精品片一区二区三区 | 精品一区二区三区18 | 视频三区精品中文字幕 | 免费一级欧美大片久久网 | 日本aaa成人毛片 | 亚洲天堂成人 | 欧美 亚洲 中文字幕 | 毛片色毛片18毛片美女 | 亚洲已满18点击进入在线观看 | 日韩欧美亚洲在线 |