Hibernate中對繼承關系的映射有三種方法:
1、每一個具體子類映射成單個數據庫表,而抽象基類不參與映射。
優點:數據操作實現簡單,每個表中都包含自己所需要的具體子類的所有信息,減少了多表關聯操作時的性能消耗。
缺點:
類的修改會導致相對應的表及其子類所對應表的更改。不支持多態查詢。
應用:
適合在類層次結構上有一定數量的抽象類的情況下使用。
2、將整個類層次映射為單個數據庫表。
這對于子類屬性不多的情況非常有效。每個子類由識別列(discriminator column)區分。
優點:
實現簡單,并支持多態。同時數據訪問也比較簡單,因為數據庫表中包含了所有需要的信息。
缺點:
增加類層次中的耦合,類層次中任何類的屬性的增加都有會導致表的變更。另外,對子類屬性的修改錯誤將會影響到整個類的層次結構。當然也浪費了大量的數據庫空間。表中引入區分子類的字段,子類的字段不能創建為空。
3、繼承關系中每個類均映射為一個數據庫表
優點:
此時,與面向對象的概念是一致的,這種映射實現策略的最大好處就是關系模型完全標準化,關系模型和領域模型完全一致,易于修改基類和增加新的子類。
缺點:
數據庫中存在大量的表,為細粒度級的數據模型,訪問數據時將存在大量的關聯表的操作,效率較低。
詳細內容:
Hibernate繼承映射-具體類映射為數據庫表 : http://www.tkk7.com/wintys/archive/2009/06/21/hibernate_inheritance_concrete.html
Hibernate繼承映射-整個類層次映射為單個數據庫表 : http://www.tkk7.com/wintys/archive/2009/06/21/hibernate_inheritance_allinone.html
Hibernate繼承映射-繼承關系中每個類均映射為一個數據庫表: http://www.tkk7.com/wintys/archive/2009/06/21/hibernate_inheritance_separate.html
[附件]:
以上三種繼承映射的源代碼:
hibernate_inheritance.zip
posted on 2009-06-21 14:24
天堂露珠 閱讀(301)
評論(0) 編輯 收藏 所屬分類:
Hibernate