程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 精通Hibernate之映射繼承關系一

精通Hibernate之映射繼承關系一

編輯:關於JAVA

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

}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類就是具體類。

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved