熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

精通Hibernate之映射繼承關系四(圖)

2022-06-13   來源: Java開源技術 

  這種映射方式只需為繼承關系樹的Employee根類創建一張表EMPLOYEES如圖所示在EMPLOYEES表中不僅提供和Employee類的屬性對應的字段還要提供和它的兩個子類的所有屬型對應的字段此外EMPLOYEES表中需要額外加入一個字符串類型的EMPLOYEE_TYPE字段用於區分Employee的具體類型
  
 

  
繼承關系樹的根類對應一個表

  
  Company類和Employee類有相應的映射文件而HourlyEmployee類和SalariedEmployee類沒有相應的映射文件顯示了持久化類映射文件和數據庫表之間的對應關系
  
 

  
持久化類映射文件和數據庫表之間的對應關系

  
   創建映射文件
  
  從Company類到Employee類是多態關聯由於關系數據模型描述了Employee類和它的兩個子類的繼承關系因此可以映射Company類的employees集合例程是Companyhbmxml文件的代碼該文件不僅映射了Company類的id和name屬性還映射了它的employees集合
  
  例程 Companyhbmxml
  
  <hibernatemapping >
  
  <class name=mypackCompany 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 />
  <onetomany class=mypackEmployee />
  </set>
  
  </class>
  </hibernatemapping>
  
  Employeehbmxml文件用於把Employee類映射到EMPLOYEES表在這個映射文件中除了需要映射Employee類本身的屬性還需要在元素中映射兩個子類的屬性例程是Employeehbmxml文件的代碼
  
  例程 Employeehbmxml
  
  <hibernatemapping >
  <class name=mypackEmployee 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 />
  
  <manytoone
  name=company
  column=COMPANY_ID
  class=mypackCompany
  />
  
  <subclass name=mypackHourlyEmployee discriminatorvalue=HE >
  <property name=rate column=RATE type=double />
  </subclass>
  
  <subclass name=mypackSalariedEmployee discriminatorvalue=SE >
  <property name=salary column=SALARY type=double />
  </subclass>
  
  </class>
  
  </hibernatemapping>
  
  在Employeehbmxml文件中元素指定EMPLOYEES表中用於區分Employee類型的字段為EMPLOYEE_TYPE兩個元素用於映射HourlyEmployee類和SalariedEmployee類元素的discriminatorvalue屬性指定EMPLOYEE_TYPE字段的取值EMPLOYEES表中有以下記錄
  
educitycn/img_///jpg >

From:http://tw.wingwit.com/Article/program/Java/ky/201311/28460.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.