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

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

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

2019-11-18 12:56:48
字體:
來源:轉載
供稿:網友

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

  
圖14-1 包含繼續關系的域模型
  

  在面向對象的范疇中,還存在多態的概念,多態建立在繼續關系的基礎上。簡單地理解,多態是指當一個Java應用變量被聲明為Employee類時,這個變量實際上既可以引用HourlyEmployee類的實例,也可以引用SalariedEmployee類的實例。以下這段程序代碼就體現了多態:
  
  List employees= businessService.findAllEmployees();
  Iterator it=employees.iterator();
  while(it.hasNext()){
  Employee e=(Employee)it.next();
  if(e instanceof HourlyEmployee){
  System.out.  }else
  System.out.println(e.getName()+" "+((SalariedEmployee)e).getSalary());
  }
  
  BusinessService類的findAllEmployees()方法通過Hibernate API從
數據庫中檢索出所有Employee對象。findAllEmployees()方法返回的集合既包含HourlyEmployee類的實例,也包含SalariedEmployee類的實例,這種查詢被稱為多態查詢。以上程序中變量e被聲明為Employee類型,它實際上既可能引用HourlyEmployee類的實例,也可能引用SalariedEmployee類的實例。
  
  此外,從Company類到Employee類為多態關聯,因為Company類的employees集合中可以包含HourlyEmployee類和SalariedEmployee類的實例。從Employee類到Company類不是多態關聯,因為Employee類的company屬性只會引用Company類本身的實例。數據庫表之間并不存在繼續關系,那么如何把域模型的繼續關系映射到關系數據模型中呢?本章將介紹以下三種映射方式:
  
  繼續關系樹的每個具體類對應一個表:關系數據模型完全不支持域模型中的繼續關系和多態。
  
  繼續關系樹的根類對應一個表:對關系數據模型進行非常規設計,在數據庫表中加入額外的區分子類型的字段。通過這種方式,可以使關系數據模型支持繼續關系和多態。
  
  繼續關系樹的每個類對應一個表:在關系數據模型中用外鍵參照關系來表示繼續關系。
  
  提示:具體類是指非抽象的類,具體類可以被實例化。HourlyEmployee類和SalariedEmployee類就是具體類。
  
  以上每種映射方式都有利有弊,本章除了介紹每種映射方式的具體步驟,還介紹了它們的適用范圍。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 墨玉县| 罗山县| 海城市| 越西县| 晋州市| 积石山| 利津县| 寻甸| 元谋县| 田东县| 安康市| 宣武区| 东辽县| 当阳市| 新乡县| 瑞安市| 五莲县| 义乌市| 忻城县| 寿阳县| 洱源县| 循化| 璧山县| 泰来县| 兴文县| 琼中| 桃园县| 永济市| 金昌市| 交城县| 上林县| 恩平市| 龙山县| 鱼台县| 香格里拉县| 宜州市| 绥宁县| 城固县| 吉隆县| 全州县| 本溪市|