这篇文章主要介绍“Hibernate继承关系树的映射方式是什么”,在日常操作中,相信很多人在Hibernate继承关系树的映射方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate继承关系树的映射方式是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
在域模型中,类与类之间除了关联关系和聚集关系,还可以存在继承关系,Company类和Employee类之间为一对多的双向关联关系(假定不允许雇员同时在多个公司兼职),Employee类为抽象类,因此它不能被实例化,它有两个具体的子类:HourlyEmployee类和SalariedEmployee类。由于Java只允许一个类最多有一个直接的父类,因此Employee类、HourlyEmployee类和SalariedEmployee类构成了一棵继承关系树。
在面向对象的范畴中,还存在多态的概念,多态建立在继承关系的基础上。简单地理解,多态是指当一个Java应用变量被声明为Employee类时,这个变量实际上既可以引用HourlyEmployee类的实例,也可以引用SalariedEmployee类的实例。以下这段程序代码就体现了多态:
List employees= businessService.findAllEmployees(); Iterator it=employees.iterator(); while(it.hasNext()){ Employee e=(Employee)it.next(); if(e instanceof HourlyEmployee){ System.out.println(e.getName()+" "+((HourlyEmployee)e).getRate()); }else System.out.println(e.getName()+" "+((SalariedEmployee)e).getSalary()); }
BusinessService类的findAllEmployees()方法通过Hibernate API从数据库中检索出所有Employee对象。findAllEmployees()方法返回的集合既包含HourlyEmployee类的实例,也包含SalariedEmployee类的实例,这种查询被称为多态查询。以上程序中变量e被声明为Employee类型,它实际上既可能引用 HourlyEmployee类的实例,也可能引用SalariedEmployee类的实例。
此外,从Company类到Employee类为多态关联,因为Company类的employees集合中可以包含 HourlyEmployee类和SalariedEmployee类的实例。从Employee类到Company类不是多态关联,因为 Employee类的company属性只会引用Company类本身的实例。数据库表之间并不存在继承关系,那么如何把域模型的继承关系映射到关系数据模型中呢?
◆Hibernate继承关系树的每个具体类对应一个表:关系数据模型完全不支持域模型中的继承关系和多态。
◆Hibernate继承关系树的根类对应一个表:对关系数据模型进行非常规设计,在数据库表中加入额外的区分子类型的字段。通过这种方式,可以使关系数据模型支持继承关系和多态。
◆Hibernate继承关系树的每个类对应一个表:在关系数据模型中用外键参照关系来表示继承关系。
提示:具体类是指非抽象的类,具体类可以被实例化。HourlyEmployee类和SalariedEmployee类就是具体类。
到此,关于“Hibernate继承关系树的映射方式是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!