服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

精通hibernate之映射继承关系四(图)


  这种映射方式只需为继承关系树的employee根类创建一张表employees。如图14-4所示,在employees表中不仅提供和employee类的属性对应的字段,还要提供和它的两个子类的所有属型对应的字段,此外,employees表中需要额外加入一个字符串类型的employee_type字段,用于区分employee的具体类型。
  
 精通hibernate之映射继承关系四(图)(图一)

  
图14-4 继承关系树的根类对应一个表

  
  company类和employee类有相应的映射文件,而hourlyemployee类和salariedemployee类没有相应的映射文件。图14-5显示了持久化类、映射文件和数据库表之间的对应关系。
  
 精通hibernate之映射继承关系四(图)(图二)

  
图14-5 持久化类、映射文件和数据库表之间的对应关系

  
  14.2.1 创建映射文件
  
  从company类到employee类是多态关联,由于关系数据模型描述了employee类和它的两个子类的继承关系,因此可以映射company类的employees集合。例程14-5是company.hbm.xml文件的代码,该文件不仅映射了company类的id和name属性,还映射了它的employees集合。
  
  例程14-5 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-6是employee.hbm.xml文件的代码。
  
  例程14-6 employee.hbm.xml
  
  <hibernate-mapping >
  <class name="mypack.employee" table="employees">
  <id name="id" type="long" column="id">
  <generator class="increment"/>
  </id>
  <discriminator column="employee_type" type="string" />
  <property name="name" type="string" column="name" />
  
  <many-to-one
  name="company"
  column="company_id"
  class="mypack.company"
  />
  
  <subclass name="mypack.hourlyemployee" discriminator-value="he" >
  <property name="rate" column="rate" type="double" />
  </subclass>
  
  <subclass name="mypack.salariedemployee" discriminator-value="se" >
  <property name="salary" column="salary" type="double" />
  </subclass>
  
  </class>
  
  </hibernate-mapping>
  
  在employee.hbm.xml文件中,元素指定employees表中用于区分employee类型的字段为employee_type,两个元素用于映射hourlyemployee类和salariedemployee类,元素的discriminator-value属性指定employee_type字段的取值。employees表中有以下记录:
  
精通hibernate之映射继承关系四(图)(图三)

扫描关注微信公众号