跟我学hibernate框架技术——在容器外实现hibernate框架继承映射关系第3部分内容摘要:

数据时将会出现下面的错误。 可见这种映射方式无法保证关系数据模型的数据完整性。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 14/32 页 14 继承关系的映射实现方式 三 每个类均映射为数据库表 继承关系树的每个类对应一个表 的实现示例 映射方式的实现 ( 1)问题的数据库表 下面以 学校管理系统 中的人员继承关系映射 问题作为示例来加以说明,如下图所示 我们将继承关系树中的每个类(包括抽象类)以及接口都对应一个表。 ( 2)创建数据库表 在本例中,需要创建 PersonBase、 StudentInfo 和 TeacherInfo 表。 如下图所示, PersonBase表仅包含和 AbstractPerson 类的属性对应的字段, StudentInfo 表仅包含和 Student 类的属性对应的字段, TeacherInfo 表仅包含和 Teacher 类的属性对应的字段。 此外, StudentInfo 表和 TeacherInfo 表都以 personID 字段作为主键,该字段还同时作为外键参照 PersonBase 表。 各个数据库表的结构如下所示: id PK depName depDescriptor Department 表 id PK depID FK personName PersonBase 表 personID PK FK StudentInfo 表 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 15/32 页 15  Department 表的结构  PersonBase 表的结构  StudentInfo 表的结构  TeacherInfo 表 的结构 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 16/32 页 16 创建 映射文件 ( 1)映射文件的设计方法 Department 类和 AbstractPerson 类有相应的映射文件 , 而 Student 类和 Teacher 类没有相应的映射文件。 下图显示了持久化类、映射文件和数据库表之 间的对应关系。 ( 2)创建映射文件 文件的内容 (继续采用前面方法的示例中的配置文件) 从 Department类到 AbstractPerson类是多态关联,由于关系数据模型描述了 AbstractPerson类和它的两个子类的继承关系,因此可以映射 Department 类的 persons 集合。 下面是 文件的代码,该文件不仅映射了 Department 类的 id 和depName 属性,还映射了它的 persons 集合。 ?xml version=? !DOCTYPE hibernatemapping Department 类 Student 类 AbstractPerson 类 Teacher 类 Department 表 PersonBase 表 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 17/32 页 17 PUBLIC //Hibernate/Hibernate Mapping DTD hibernatemapping class name= table=Department id name=id type=int column=ID generator class=increment/ /id property name=depName type=string column=depName / set name=persons inverse=true lazy=true key column=depID / onetomany class= / /set /class /hibernatemapping ( 3)注意 DepartmentPO 类的代码 Department 类的代码进行采用前面的 Department 类,它的代码应该为下面的状态 注意“ Set persons”集合的定义 可以借用第二种方法中的代码。 package。 import .*。 public class DepartmentPO { private int id。 private String depName。 private Set persons=null。 public Set getPersons() { return persons。 } public void setPersons(Set persons) { 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 18/32 页 18 = persons。 } public String getDepName() { return depName。 } public void setDepName(String depName) { = depName。 } public int getId() { return id。 } public void setId(int id) { = id。 } public boolean equals(Object other) { if (this == other) { return true。 } if (! (other instanceof Department)) { return false。 } return true。 } } ( 4)创建映射文件 文件的内容 文件用于把 PersonBase 类映射到 PersonBase 表,在这个映射文件中,除了需要映射 PersonBase 类本身的属性,还需要在 joinedsubclass元素中映射两个子类的属性。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 19/32 页 19 下面是 文件的代码。 ?xml version=? !DOCTYPE hibernatemapping PUBLIC //Hibernate/Hibernate Mapping DTD hibernatemapping class name= table=PersonBase id name=id type=int column=id generator class=increment/ /id property name=personName type=string column=personName / manytoone name=department column=depID class= / joinedsubclass name= 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 20/32 页 20 table=StudentInfo key column=personID / property name=studentLevel column=studentLevel type=int / property name=studentMajor c。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。