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

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

 在域模子中,类与类之间除了联系关系关系和聚积关系,还可以存在继续关系,在图14-1所示的域模子中,Company类和Employee类之间为一对多的双向联系关系关系(假定不承诺雇员同时在多个公司兼职),Employee类为抽象类,是以它不能被实例化,它有两个具体的子类:HourlyEmployee类和SalariedEmployee类。因为Java只承诺一个类最多有一个直接的父类,是以Employee类、HourlyEmployee类和SalariedEmployee类组成了一棵继续关系树。
  在面向对象典型乘鱿脯还存在多态的概念,多态成立在继续关系的基本上。简单地舆解,多态是指当一个Java应用变量被声明为Employee类时,这个变量现实上既可以引用HourlyEmployee类的实例,也可以引用SalariedEmployee类的实例。以下这段轨范代码就浮现了多态:
  BusinessService类的findAllEmployees()体例经由过程Hibernate API年夜数据库中检索出所有Employee对象。findAllEmployees()体例返回的集结既包含HourlyEmployee类的实例,也包含SalariedEmployee类的实例,这种发芽被称为多态发芽。以上轨范中变量e被声明为Employee类型,它现实上既可能引用HourlyEmployee类的实例,也可能引用SalariedEmployee类的实例。
  此外,年夜Company类到Employee类为多态联系关系,因为Company类的employees集结中可以包含HourlyEmployee类和SalariedEmployee类的实例。年夜Employee类到Company类不是多态联系关系,因为Employee类的company属性只会引用Company类自己的实例。数据库表之间并不存在继续关系,那么若何把域模子的继续关系映射到关系数据模子中呢?本章将介绍以下三种映射体例:
  继续关系树的每个具体类对应一个表:关系数据模子完全不撑持域模子中的继续关系和多态。
  继续关系树的根类对应一个表:对关系数据模子进行很是规设计,在数据库表中插手额外的区分子类型的字段。经由过程这种体例,可以使关系数据模子撑持继续关系和多态。
  继续关系树的每个类对应一个表:在关系数据模子赌暌姑外键参照关系来暗示继续关系。
  提醒:具体类是指风度象的类,具体类可以被实例化。HourlyEmployee类和SalariedEmployee类就是具体类。
  以膳缦憧种映射体例都有利有弊,本章除了介绍每种映射体例的具体轨范,还介绍了它们的合用规模。
页: [1]
查看完整版本: JAVA认证:教你精通Hibernate之映射继续关系(3)