亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

精通Hibernate映射繼承關系之五

2019-11-18 16:11:55
字體:
來源:轉載
供稿:網友

  本章介紹的三種映射方式各有優缺點,表14-1對這三種映射方式做了比較。




精通Hibernate映射繼承關系之五(圖一)
點擊查看大圖


表14-1 比較三種映射方式


如果不需要支持多態查詢和多態關聯,可以采用每個具體類對應一個表的映射方式,如果需要支持多態查詢和多態關聯,并且子類包含的屬性不多,可以采用根類對應一個表的映射方式,如果需要支持多態查詢和多態關聯,并且子類包含的屬性很多,可以采用每個類對應一個表的映射方式。如果繼承關系樹中包含接口,可以把它當做抽象類來處理。

圖14-9顯示了一棵復雜的繼承關系樹,其中DOClass類為抽象類,其他均為具體類。

精通Hibernate映射繼承關系之五(圖二)


圖14-9 復雜的繼承關系樹
可以將圖14-9的繼承關系樹分解為3棵子樹:

DOClass類、ClassA類和ClassB類為一棵子樹:DOClass類為抽象類,位于整個繼承關系樹的頂層,通常不會對它進行多態查詢,因此可以采用每個具體類對應一個表的映射方式,ClassA類對應TABLE_A表,ClassB類對應TABLE_B表。

ClassA類、ClassC類、ClassD類、ClassG類和ClassH類為一棵子樹:ClassA類的所有子類都只包含少量屬性,因此可以采用根類對應一個表的映射方式,ClassA類對應TABLE_A表。

ClassB類、ClassE類和ClassF為一棵子樹:ClassB類的兩個子類都包含很多屬性,因此采用每個類對應一個表的映射方式,ClassB類對應TABLE_B表,ClassE類對應TABLE_E表,ClassF類對應TABLE_F表。

如圖14-10所示,在關系數據模型中,只需創建TABLE_A、TABLE_B、TABLE_E和TABLE_F表,其中TABLE_A中包含了與DOClass、ClassA、ClassC、ClassD、ClassG和ClassH的屬性對應的字段。TABLE_B中包含了與DOClass和ClassB的屬性對應的字段,TABLE_E和TABLE_F的B_ID字段既是主鍵,又是參照TABLE_B表的外鍵。

精通Hibernate映射繼承關系之五(圖三)


圖14-10 復雜繼承關系樹對應的關系數據模型


只需創建兩個映射文件,ClassA.hbm.xml和ClassB.hbm.xml,例程14-9和例程14-10分別為它們的源代碼。

例程14-9 ClassA.hbm.xml
<hibernate-mapping >      <class name="mypack.ClassA" table="TABLE_A" discriminator-value="A" >      <id name="id" type="long" column="ID">        <generator class="increment"/>      </id>      <discriminator column="A_TYPE" type="string"  />        <PRoperty name="a1" type="string" column="A1" />      <subclass name="mypack.ClassC" discriminator-value="C" >         <property name="c1" column="C1" type="string" />      </subclass>      <subclass name="mypack.ClassD" discriminator-value="D" >      <property name="d1" column="D1" type="string" />       <subclass name="mypack.ClassG" discriminator-value="G" >      <property name="g1" column="G1" type="string" />      </subclass>              <subclass name="mypack.ClassH" discriminator-value="H" >      <property name="h1" column="H1" type="string" />      </subclass>      </subclass>      </class>      </hibernate-mapping>



例程14-10 ClassB.hbm.xml

 
<hibernate-mapping >      <class name="mypack.ClassB" table="TABLE_B">      <id name="id" type="long" column="ID">      <generator class="increment"/>      </id>      <property name="b1" type="string" column="B1" />      <joined-subclass name="mypack.ClassE"  table="TABLE_E">         <key column="B_ID" />         <property name="e1" column="E1" type="string" />         <property name="e2" column="E2" type="string" />         <property name="e3" column="E3" type="string" />         <property name="e4" column="E4" type="string" />         <property name="e5" column="E5" type="string" />         <property name="e6" column="E6" type="string" />      </joined-subclass >      <joined-subclass name="mypack.ClassF"  table="TABLE_F">         <key column="B_ID" />         <property name="f1" column="F1" type="string" />         <property name="f2" column="F2" type="string" />         <property name="f3" column="F3" type="string" />         <property name="f4" column="F4" type="string" />         <property name="f5" column="F5" type="string" />         <property name="f6" column="F6" type="string" />      </joined-subclass >      </class>      </hibernate-mapping>

在ClassA.hbm.xml文件中,在用于映射ClassD的元素中還嵌入了兩個元素,它們分別映射ClassG和ClassH類。在以及所有的元素中都設置了discriminator-value屬性,Hibernate根據discriminator-value屬性來判斷TABLE_A表中的記錄對應哪個類的實例,如果 TABLE_A表的一條記錄的A_TYPE字段取值為"A",表明它是ClassA類的實例,如果A_TYPE字段取值為"G",表明它是ClassG類的實例,依次類推。

值得注意的是,在元素中只能嵌入子元素,但不能嵌入子元素,而在元素中只能嵌入子元素,但不能嵌入< subclass>子元素。

本節的范例程序位于配套光盤的sourcecode/chapter14/14.4目錄下,運行該程序前,需要在SAMPLEDB數據庫中手工創建TABLE_A表、TABLE_B表、TABLE_E表和TABLE_F表,相關的SQL腳本文件為/14.4/schema/sampledb.sql。

在DOS命令行下進入chapter14根目錄,然后輸入命令:

ant  -file  build4.xml  run


就會運行BusinessService類。BusinessService的main()方法調用test()方法,test()方法調用saveDO(DOClass Object)方法,它負責保存一個DOClass對象,saveDO()方法的代碼如下:

tx = session.beginTransaction();session.save(object);tx.commit();


在test()方法中,創建了一個ClassG類的實例和一個ClassF類的實例,然后調用saveDO()方法分別保存這兩個實例:

ClassG g=new ClassG("a1","d1","g1");saveDO(g); ClassF f=new ClassF("b1","f1","f2","f3","f4","f5","f6","f7");saveDO(f);


Session的save()方法能判斷object變量實際引用的實例的類型,如果object變量引用ClassG類的實例,就執行如下insert語句:


insert into TABLE_A (ID,A1,D1,G1,A_TYPE) values (1, 'a1', 'd1', 'g1','G');


如果object變量引用ClassF類的實例,就執行如下insert語句:

insert into TABLE_B (ID,B1) values (1, 'b1');insert into TABLE_F (B_ID ,F1, F2, F3, F4, F5, F6) values (1, 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7');

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
超碰精品一区二区三区乱码| 国产中文字幕日韩| 国内久久久精品| 久久伊人91精品综合网站| 欧美亚洲一区在线| 欧美日韩一区二区在线| 精品久久久久久久久久| 亚洲天堂成人在线| 97**国产露脸精品国产| 成人动漫网站在线观看| 亚洲精品国产福利| 亚洲美女视频网| 日韩欧美国产激情| 欧美激情影音先锋| 韩国欧美亚洲国产| 精品久久久久久中文字幕一区奶水| 亚洲成人av在线播放| 国产综合色香蕉精品| 日韩小视频在线观看| 久久精品视频va| 久久国产精品影视| 国产精品久久久久999| 欧美性猛交xxxx免费看漫画| 中文字幕精品影院| 全色精品综合影院| 久久免费少妇高潮久久精品99| 成人在线国产精品| 亚洲国产精品一区二区三区| 美女扒开尿口让男人操亚洲视频网站| 日韩视频永久免费观看| 7777kkkk成人观看| 亚洲国产成人在线播放| 国产日韩在线一区| 成人激情在线观看| 欧洲s码亚洲m码精品一区| 国产一区二区在线播放| 精品国产91久久久久久| 最近日韩中文字幕中文| 136fldh精品导航福利| 日韩电影中文字幕| 91麻豆国产精品| 国产成人极品视频| 国产日本欧美视频| 精品国产拍在线观看| 久久精品亚洲精品| 色妞一区二区三区| 97久久超碰福利国产精品…| 国产ts人妖一区二区三区| 国产欧美精品在线播放| 一本大道亚洲视频| 欧美大尺度激情区在线播放| 97成人精品区在线播放| 中文字幕日韩精品在线| 欧美高清视频免费观看| 亚洲伦理中文字幕| 91夜夜未满十八勿入爽爽影院| 揄拍成人国产精品视频| 一本色道久久88亚洲综合88| 国产精品福利网| 久久精品亚洲国产| 欧美xxxx18性欧美| 欧美午夜片在线免费观看| 亚洲日韩中文字幕| 日韩av男人的天堂| 欧美wwwxxxx| 欧美激情在线有限公司| 日韩欧美国产一区二区| 91国在线精品国内播放| 蜜月aⅴ免费一区二区三区| 日韩在线视频观看正片免费网站| 国产一区二区黄| 欧美黑人又粗大| 日韩视频欧美视频| 欧美xxxx做受欧美.88| 自拍偷拍亚洲欧美| 一区二区在线免费视频| 欧美电影在线免费观看网站| 亚洲黄色在线看| 国产精品伦子伦免费视频| 91豆花精品一区| 一个色综合导航| 欧美在线一区二区三区四| 欧美亚洲视频在线观看| 欧美精品制服第一页| 色综合亚洲精品激情狠狠| 欧美色播在线播放| 亚洲色图13p| 欧美在线www| 亚洲欧美在线免费| 日韩免费精品视频| 伊人一区二区三区久久精品| 91精品中文在线| 国产亚洲视频在线观看| 国产专区精品视频| 国产美女主播一区| 亚洲欧美日韩一区二区在线| 国产在线观看精品一区二区三区| 成人国内精品久久久久一区| 成人激情综合网| 久久精品视频va| 欧美裸体男粗大视频在线观看| 欧美超级免费视 在线| 日韩一区二区三区在线播放| 亚洲欧美日韩国产成人| 亚洲国产精品va在线看黑人动漫| 91九色视频在线| 国产成人精品在线播放| 九九热99久久久国产盗摄| 日韩中文字幕视频在线| 日韩高清电影好看的电视剧电影| 亚洲成avwww人| 国产精品久久久久久久久久久久| 亚洲欧美日本精品| 欧美日韩在线视频一区二区| 懂色aⅴ精品一区二区三区蜜月| 欧美亚洲伦理www| 国产精品美女久久久免费| 精品亚洲aⅴ在线观看| 亚洲天堂av图片| 日韩美女免费线视频| 亚洲国产精品国自产拍av秋霞| 97国产一区二区精品久久呦| 亚洲一级一级97网| 中文字幕日韩av综合精品| 国产精品久久久久久久9999| 成人在线观看视频网站| 日韩av电影国产| 国产精品r级在线| 久久艹在线视频| 日韩视频中文字幕| 欧美人交a欧美精品| 久久久久久久网站| 国产亚洲欧美日韩美女| 热久久这里只有精品| 亚洲成人av在线播放| 日韩av电影在线免费播放| 欧美视频中文字幕在线| 国产69精品久久久久9| 庆余年2免费日韩剧观看大牛| 日本国产一区二区三区| 精品性高朝久久久久久久| 亚洲天堂av在线免费观看| 国产欧美日韩精品专区| 日韩精品亚洲精品| 久久成人免费视频| 久久精品电影网站| 欧美性视频在线| 精品久久久视频| 亚洲精品国偷自产在线99热| 亚洲自拍偷拍第一页| 色综合久久悠悠| 欧美一级淫片videoshd| 亚洲男人的天堂在线播放| 亚洲永久免费观看| 日韩成人中文电影| 95av在线视频| 久久99久久99精品中文字幕| 51色欧美片视频在线观看| 欧美日韩激情美女| 在线a欧美视频| 91久久精品美女高潮| 久久亚洲成人精品| 日韩av电影手机在线| 国产精品91久久|