国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

精通Hibernate映射繼承關(guān)系之一

2019-11-18 16:11:50
字體:
供稿:網(wǎng)友

  在域模型中,類與類之間除了關(guān)聯(lián)關(guān)系和聚集關(guān)系,還可以存在繼承關(guān)系,在圖14-1所示的域模型中,Company類和Employee類之間為一對多的雙向關(guān)聯(lián)關(guān)系(假定不允許雇員同時在多個公司兼職),Employee類為抽象類,因此它不能被實例化,它有兩個具體的子類:HourlyEmployee類和SalariedEmployee類。由于java只允許一個類最多有一個直接的父類,因此Employee類、HourlyEmployee類和SalariedEmployee類構(gòu)成了一棵繼承關(guān)系樹。
精通Hibernate映射繼承關(guān)系之一


圖14-1 包含繼承關(guān)系的域模型


在面向?qū)ο蟮姆懂犞校€存在多態(tài)的概念,多態(tài)建立在繼承關(guān)系的基礎(chǔ)上。簡單地理解,多態(tài)是指當(dāng)一個Java應(yīng)用變量被聲明為Employee類時,這個變量實際上既可以引用HourlyEmployee類的實例,也可以引用SalariedEmployee類的實例。以下這段程序代碼就體現(xiàn)了多態(tài):

List employees= businessService.findAllEmployees();Iterator it=employees.iterator();while(it.hasNext()){Employee e=(Employee)it.next();if(e instanceof HourlyEmployee){System.out.



BusinessService類的findAllEmployees()方法通過Hibernate API從
數(shù)據(jù)庫中檢索出所有Employee對象。findAllEmployees()方法返回的集合既包含HourlyEmployee類的實例,也包含SalariedEmployee類的實例,這種查詢被稱為多態(tài)查詢。以上程序中變量e被聲明為Employee類型,它實際上既可能引用HourlyEmployee類的實例,也可能引用SalariedEmployee類的實例。

此外,從Company類到Employee類為多態(tài)關(guān)聯(lián),因為Company類的employees集合中可以包含HourlyEmployee類和SalariedEmployee類的實例。從Employee類到Company類不是多態(tài)關(guān)聯(lián),因為Employee類的company屬性只會引用Company類本身的實例。數(shù)據(jù)庫表之間并不存在繼承關(guān)系,那么如何把域模型的繼承關(guān)系映射到關(guān)系數(shù)據(jù)模型中呢?本章將介紹以下三種映射方式:

繼承關(guān)系樹的每個具體類對應(yīng)一個表:關(guān)系數(shù)據(jù)模型完全不支持域模型中的繼承關(guān)系和多態(tài)。

繼承關(guān)系樹的根類對應(yīng)一個表:對關(guān)系數(shù)據(jù)模型進(jìn)行非常規(guī)設(shè)計,在數(shù)據(jù)庫表中加入額外的區(qū)分子類型的字段。通過這種方式,可以使關(guān)系數(shù)據(jù)模型支持繼承關(guān)系和多態(tài)。

繼承關(guān)系樹的每個類對應(yīng)一個表:在關(guān)系數(shù)據(jù)模型中用外鍵參照關(guān)系來表示繼承關(guān)系。

提示:具體類是指非抽象的類,具體類可以被實例化。HourlyEmployee類和SalariedEmployee類就是具體類。

以上每種映射方式都有利有弊,本章除了介紹每種映射方式的具體步驟,還介紹了它們的適用范圍。

(出處:http://www.survivalescaperooms.com)



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 昂仁县| 建阳市| 潍坊市| 南丰县| 信丰县| 晋州市| 措勤县| 安龙县| 稻城县| 呈贡县| 盐山县| 宽甸| 沈阳市| 手游| 鹤岗市| 伊宁市| 莎车县| 平罗县| 河南省| 鱼台县| 德阳市| 濮阳县| 池州市| 苍南县| 石阡县| 育儿| 寿阳县| 莲花县| 衡南县| 达州市| 富源县| 卢氏县| 三明市| 兴安盟| 农安县| 承德市| 宣威市| 邢台市| 五莲县| 武胜县| 隆回县|