
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://m.survivalescaperooms.com)
新聞熱點
疑難解答