在这种映射方式下,继承关系树的每个类以及接口都对应一个表。在本例中,需要创建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
<hibernate-mapping >
<class name="mypack.Company" table="COMPANIES" >
<id name="id" type="long" column="ID">
<generator class="increment"/>
</id>
<property name="name" type="string" column="NAME" />
<set
name="employees"
inverse="true"
lazy="true" >
<key column="COMPANY_ID" />
<one-to-many class="mypack.Employee" />
</set>
</class>
</hibernate-mapping>
|
Employee.hbm.xml文件用于把Employee类映射到EMPLOYEES表,在这个映射文件中,除了需要映射Employee类本身的属性,还需要在 元素中映射两个子类的属性。例程14-8是Employee.hbm.xml文件的代码。
例程14-8 Employee.hbm.xml
| <hibernate-mapping > <class name="mypack.Employee" table="EMPLOYEES"> <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="name" type="string" column="NAME" /> <many-to-one name="company" column="COMPANY_ID" class="mypack.Company" /> <joined-subclass name="mypack.HourlyEmployee" table="HOURLY_EMPLOYEES" > <key column="EMPLOYEE_ID" /> <property name="rate" column="RATE" type="double" /> </joined-subclass> <joined-subclass name="mypack.SalariedEmployee" table="SALARIED_EMPLOYEES" > <key column="EMPLOYEE_ID" /> <property name="salary" column="SALARY" type="double" /> </joined-subclass> </class> </hibernate-mapping> |
在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);
请保留地址 http://www.qqread.com/java/2008/01/i392831.html相关专题
- Hibernate原理与配置 (359篇文章)
- Hibernate高级特性 (63篇文章)
- Hibernate相关文章 (359篇文章)
- J2SE综合:浅谈java程序发布之 jre 篇 (11次浏览)
- JAVA代码中使用魔法数值 (8次浏览)
- Hibernate缓存管理 (6次浏览)
- JAVA代码应该流畅和结构化 (5次浏览)
- Java JVM设置对性能的影响 (4次浏览)
- 开发框架:深入了解 Struts Validator (3次浏览)
- Java中的通信机制及与C/C API的集成 (1次浏览)
- 用Hibernate实现领域对象的自定义字段 (1次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)





