会计考友 发表于 2012-8-4 12:44:44

JAVA认证:教你精通Hibernate之映射继续关系(2)

把每个具体类映射到一张表是最简单的映射体例。如图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显示了持久化类、映射文件和数据库表之间的对应关系。
  假如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
  HourlyEmployee.hbm.xml文件用于把HourlyEmployee类映射到HE表,在这个映射文件中,除了需要映射HourlyEmployee类自己的rate属性,还需要映射年夜Employee类中继续的name属性,此外还要映射年夜Employee类中继续的与Company类的联系关系关系。例程14-2是HourlyEmployee.hbm.xml文件的代码。
  例程14-2 HourlyEmployee.hbm.xml
  SalariedEmployee.hbm.xml文件用于把SalariedEmployee类映射到SE表,在这个映射文件中,除了需要映射SalariedEmployee类自己的salary属性,还需要映射年夜Employee类中继续的name属性,此外还要映射年夜Employee类中继续的与Company类的联系关系关系。例程14-3是SalariedEmployee.hbm.xml文件的代码。
页: [1]
查看完整版本: JAVA认证:教你精通Hibernate之映射继续关系(2)