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

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > 【SSH系列】Hibernate映射 -- 繼承映射

【SSH系列】Hibernate映射 -- 繼承映射

來源:程序員人生   發布時間:2016-07-21 09:10:21 閱讀次數:3607次

開篇前言

在前面的博文中,小編介紹了hibernate中的映照,1對1,1對多,多對多,單向,雙向等,今天這篇博文,小編主要來介紹1下hibernate中的繼承映照,小火伴都知道在C#中,如果想要實現繼承,直接在子類中添加冒號便可繼承父類,在java中可以用關鍵字extends實現,那末在hibernate中,甚么是繼承映照呢?繼承映照的方式又是甚么?繼承映照具有幾種策略呢?不同策略之間又存在著怎樣樣的區分和聯系呢?該博文,小編就來簡單的總結1下hibernate中的繼承映照。

繼承映照是甚么

首先,我們來看這樣的1張表結構:

      

上述的表結構就是繼承映照的1種,小豬豬和小鳥鳥他們共用了字段Name和Sex,除此以外,有些字段是針對某種數據而存在的,所以在數據庫中為空,如上所,weight是針對小豬豬而言的,而height是針對小鳥鳥而言的,從上面的表結構,我們可以得出,有些字段是共用的,有些字段是自己獨有的,她們通過type這個字段來進行區分,ok,小編相信,小火伴們現在對繼承映照已有了1定的了解,接著小編來介紹繼承映照的方式。   

  繼承映照方式

在前面的博文中,小編提到過,c#和java中的繼承,但是在數據庫的世界中,表之間是沒有任何關鍵字可以明確指明這兩張表的父子關系,表與表是沒有繼承關系這樣的說法的。為了將程序領域中的繼承關系反應到數據中,Hibernate為我們提供了3種策略,分別是:
a、每顆類繼承樹1張表;
b、每一個類1張表;
c、每一個具體類1張表;
我們仍然從uml入手,看對象模型,以下所示:

Pig和Bird都繼承Animal,她們都有id,name,sex,但是Pig主要看weight,而Bird主要看height,此時如果把這些數據存入到數據庫中,可以有3種方案,也就是3種策略。ok,接下來結合Animal這個例子,分別對3種策略進行講授。
第1種、每顆類繼承樹1張表
這類方式,只生成1個table,對應的繼承映照策略是“單表繼承”。如圖:   


每顆類繼承樹1張表,也就是使用1張表表示所有繼承體系下的類的屬性的并集,這類策略是使用<subclass>標簽來實現的。由于類繼承體系下會有許多個子類,要把多個類的信息寄存在1張表中,必須有某種機制來辨別哪些記錄是屬于哪一個類的。Hibernate中的這類機制就是,在表中添加1個字段,用這個字段的值來進行辨別。在表中添加這個標示列使用<discriminator>標簽來實現,hbm.xml文件以下所示:

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping⑶.0.dtd"> <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種、每一個類1張表

這類方式,每一個類生成1個table,對應的繼承策略是“類表繼承”。如圖:

這類策略是使用<joined-subclass>標簽來定義子類的。父類、子類都對應1張數據庫表。在父類對應的數據庫表中,它存儲了所有記錄的公共信息,實際上該父類對應的表會包括所有的記錄,包括父類和子類的記錄;在子類對應的數據庫表中,這個表只定義了子類中所獨有的屬性映照的字段。子類對應的數據表與父類對應的數據表,通過1對1主鍵關聯的方式關聯起來。Hbm.xml文件以下所示:

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping⑶.0.dtd"> <hibernate-mapping package="com.bjpowernode.hibernate"> <class name="Animal" table="t_animal"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <properties 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 = "bird"/> <property name="height"/> </joined-subclass> </class> </hibernate-mapping>
第3種、每一個具體類1張表
這類方式,生成3張表,對應的策略是“具體表繼承”,以下圖所示:

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 在线观看麻豆 | 国产性生活视频 | 日本一级高清不卡视频在线 | 亚洲91av| 呦视频在线一区二区三区 | 亚洲天堂精品视频 | 欧美性色视频 | 欧美日韩另类国产 | 亚洲黄色在线视频 | 大伊人久久 | 亚洲欧美一级久久精品 | 冲田杏梨j和l超乳w真性中出 | 精品亚洲福利一区二区 | 国产日韩欧美综合一区二区三区 | 另类小说图片 | 欧美三级视频在线播放 | 黄色的免费网站 | 欧洲精品码一区二区三区免费看 | 国产午夜亚洲精品不卡 | 激情粉嫩精品国产尤物 | 看欧美的一级毛片 | 日本xxxx18护士 | 最近的中文字幕大全免费8 最近的中文字幕大全免费版 | 美国一级毛片片aa久久综合 | 精品欧美一区二区三区在线观看 | 波多野结衣视频在线免费观看 | 亚洲综合射 | 国产成人精品福利网站人 | 日韩在线不卡一区在线观看 | 精品国产福利久久久 | 中文字幕一区二区在线观看 | 久久精品国产99久久6动漫欧 | 依人在线免费视频 | 韩国av片永久免费 | 九九热国产精品视频 | 欧美精品高清 | 在线亚洲成人 | 亚洲日本视频在线观看 | 欧美性色一级在线观看 | 欧美a在线观看 | 日韩专区亚洲综合久久 |