WEB开发网
开发学院WEB开发Jsp 精通Hibernate之映射继承关系二(图) 阅读

精通Hibernate之映射继承关系二(图)

 2008-01-05 10:11:48 来源:WEB开发网   
核心提示:把每个具体类映射到一张表是最简单的映射方式,如图14-2所示,精通Hibernate之映射继承关系二(图),在关系数据模型中只需定义COMPANIES、HOURLY_EMPLOYEES和SALARIED_EMPLOYEES表,为了叙述的方便,还需要映射从Employee类中继续的name属性,此外还要映射从Employ

  把每个具体类映射到一张表是最简单的映射方式。如图14-2所示,在关系数据模型中只需定义COMPANIES、HOURLY_EMPLOYEES和SALARIED_EMPLOYEES表。为了叙述的方便,下文把HOURLY_EMPLOYEES表简称为HE表,把SALARIED_EMPLOYEES表简称为SE表。
  
  HourlyEmployee类和HE表对应,HourlyEmployee类本身的rate属性,以及从Employee类中继续的id属性和name属性,在HE表中都有对应的字段。此外,HourlyEmployee类继续了Employee类与Company类的关联关系,与此对应,在HE表中定义了参照COMPANIES表的COMPANY_ID外键。
  
  SalariedEmployee类和SE表对应,SalariedEmployee类本身的salary属性,以及从Employee类中继续的id属性和name属性,在SE表中都有对应的字段。此外,SalariedEmployee类继续了Employee类与Company类的关联关系,与此对应,在SE表中定义了参照COMPANIES表的COMPANY_ID外键。
  
  Company类、HourlyEmployee类和SalariedEmployee类都有相应的映射文件,而Employee类没有相应的映射文件。图14-3显示了持久化类、映射文件和数据库表之间的对应关系。
  
 精通Hibernate之映射继续关系二(图)(图一)

  
图14-2 每个具体类对应一个表

  
精通Hibernate之映射继续关系二(图)(图二)

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

  
  假如Employee类不是抽象类,即Employee类本身也能被实例化,那么还需要为Employee类创建对应的EMPLOYEES表,此时HE表和SE表的结构仍然和图14-2中所示的一样。这意味着在EMPLOYEES表、HE表和SE表中都定义了相同的NAME字段以及参照COMPANIES表的外键COMPANY_ID。另外,还需为Employee类创建单独的Employee.hbm.xml文件。
  
  14.1.1 创建映射文件
  
  从Company类到Employee类是多态关联,但是由于关系数据模型没有描述Employee类和它的两个子类的继续关系,因此无法映射Company类的employees集合。例程14-1是Company.hbm.xml文件的代码,该文件仅仅映射了Company类的id和name属性。
  
  例程14-1 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" />
  
  </class>
  </hibernate-mapping>
  
  HourlyEmployee.hbm.xml文件用于把HourlyEmployee类映射到HE表,在这个映射文件中,除了需要映射HourlyEmployee类本身的rate属性,还需要映射从Employee类中继续的name属性,此外还要映射从Employee类中继续的与Company类的关联关系。例程14-2是HourlyEmployee.hbm.xml文件的代码。
  
  例程14-2 HourlyEmployee.hbm.xml
  
  <hibernate-mapping >
  <class name="mypack.HourlyEmployee" table="HOURLY_EMPLOYEES">
  <id name="id" type="long" column="ID">
  <generator class="increment"/>
  </id>
  
  <property name="name" type="string" column="NAME" />
  <property name="rate" column="RATE" type="double" />
  
  <many-to-one
  name="company"
  column="COMPANY_ID"
  class="mypack.Company"
  />
  </class>
  </hibernate-mapping>
  SalariedEmployee.hbm.xml文件用于把SalariedEmployee类映射到SE表,在这个映射文件中,除了需要映射SalariedEmployee类本身的salary属性,还需要映射从Employee类中继续的name属性,此外还要映射从Employee类中继续的与Company类的关联关系。例程14-3是SalariedEmployee.hbm.xml文件的代码。
  
  例程14-3 SalariedEmployee.hbm.xml

Tags:精通 Hibernate 映射

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接