文档详情

Hibernate继承映射.doc

发布:2017-02-01约5.35千字共6页下载文档
文本预览下载声明
在Java或.Net类与类之间存在关联、聚集和继承关系。一般来说: 关联关系:采用“一对多或一对一”的映射即可; 聚集关系:采用“集和映射”,即映射Set,Bag,List,Map继承关系:本文以下详述 ? 因为关系数据库的表之间不存在继承关系,所以Hibernate提供了以下三种对继承关系映射的方法,即在继承关系树中: (1)、每个具体类(非抽象类)对应一个表:此方式中关系数据模型完全不支持对象的继承关系。 (2)、基类(根类)对应一个表:此方式中对关系数据模型进行非常规设计,在数据库表中加入额外的区分子类的字段,从而使关系数据模型可以支持继承关系。 (3)、每个类对应一个表:此方式中在关系数据模型中用外键关系来表示继承关系。 这三种映射方式都各自有利有弊,需要根据具体情况来选择使用。分别说明一下: 为了说明方便,引用一个比较经典的简单例子 Employee类,它为抽象类,有两个直接子类 HourlyEmployee类,Employee的子类,继承父类的name属性 SalarilyEmployee类,Employee的子类,继承父类的name属性 Company类,它有一个employees集和属性 在此,先这样说明一下啊,日后有时间放个类图上来就一目了然了。 ? 继承关系中每个具体类对应一个表 这是最简单的映射方式。基类Employee没用映射,只需要为两个子类提供映射关系即可。看一下映射文件: hibernate-mapping package=com.wjb.mypack ??? !--Company的映射-- ??? class name=Company table=COMPANIES ??????? id name=id type=long column=ID ??????????? generator class=native/ ??????? /id ??????? property name=name type=string column=NAME/ ??? /class ??? !--HourlyEmployee的映射-- ??? class name=HouredEmployee table=HOURLY_EMPLOYEES ??????? id name=id type=long column=ID ??????????? generator class=native/ ??????? /id ??????? !--映射从父类继承的name属性-- ??????? property name=name type=string column=NAME/ ??????? property name=rate type=double column=RATE/ ??????? many-to-one name=company ????????????????column=COMPANY_ID class=Company/??????? ??? /class ??? !--SalarilyEmployee的映射-- ??? class name=SalarilyEmployee table=SALARILY_EMPLOYEES ??????? id name=id type=long column=ID ??????????? generator class=native/ ??????? /id ??????? !--映射从父类继承的name属性-- ??????? property name=name type=string column=NAME/ ??????? property name=salary type=double column=SALARY/ ??????? many-to-one name=company ????????????????column=COMPANY_ID class=Company/ ??? /class ??? !--注:Employee类没有映射,在DB中不存在对应的表-- /hibernate-mapping ? 可以看出,在这种映射方式中,每个子类除了映射自己的属性外,还需要映射从父类继承来下的属性,这是该映射方式的一个特点。 ? 基类(根类)对应一个表 这种映射方式只需为基类Employee创建一个表即可。在表中不仅提供与Employee所有属性的字段,还要提供与所有子类属性对应的字段,此外还需要一个字段用于区分子类的具体类型。此时的映射文件为: hibernate-mapping package=com.wjb.mypack ??? !--Company的映射-- ??? class name=Company table=COMPANIES ?????
显示全部
相似文档