首页 > 新闻系统 > 编程天地 > 文章正文

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>
9 7 3 1 2 3 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

本周软件下载排行

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203