分类:
2008-10-17 14:26:14
在这种映射方式下,继承关系树的每个类以及接口都对应一个表。在本例中,需要创建EMPLOYEES、HE和SE表。
如图14-6所示,EMPLOYEES表仅包含和Employee类的属性对应的字段,HE表仅包含和HourlyEmployee类的属性对应的字段,SE表仅包含和SalariedEmployee类的属性对应的字段。此外,HE表和SE表都以EMPLOYEE_ID字段作为主键,该字段还同时作为外键参照EMPLOYEES表。
图14-6 继承关系树的每个类对应一个表
图14-7 持久化类、映射文件和数据库表之间的对应关系14.3.1 创建映射文件
从Company类到Employee类是多态关联,由于关系数据模型描述了Employee类和它的两个子类的继承关系,因此可以映射Company类的employees集合。例程14-7是Company.hbm.xml文件的代码,该文件不仅映射了Company类的id和name属性,还映射了它的employees集合。
例程14-7 Company.hbm.xml
|
Employee.hbm.xml文件用于把Employee类映射到EMPLOYEES表,在这个映射文件中,除了需要映射Employee类本身的属性,还需要在 元素中映射两个子类的属性。例程14-8是Employee.hbm.xml文件的代码。
例程14-8 Employee.hbm.xml
column="COMPANY_ID" class="mypack.Company" /> |
在Employee.hbm.xml文件中,两个元素用于映射HourlyEmployee类和SalariedEmployee类,元素的子元素指定HE表和SE表中既作为主键又作为外键的EMPLOYEE_ID字段。
由于HourlyEmployee类和SalariedEmployee类没有单独的映射文件,因此在初始化Hibernate时,只需向Configuration对象中加入Company类和Employee类:
Configuration config = new Configuration();
config.addClass(Company.class)
。addClass(Employee.class);
[1]