Hibernate之映射继承关系2008-01-15 14:52:40 来源:中国自学编程网 作者: 点击:
EMPLOYEES表仅包含和Employee类的属性对应的字段,HE表仅包含和HourlyEmployee类的属性对应的字段,SE表仅包含和SalariedEmployee类的属性对应的字段。 ![]() 如图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> 相关文章: |