版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 Hibernate对象关系映射上节回顾 Hibernate的映射文件详细配置 掌握Hibernate应用的七个步骤 熟练使用Hibernate实现如下操作 添加数据 修改数据 删除数据 基本查询操作主要内容 对象关系映射 一对一单向关联 一对一双向关联 多对一单向关联 一对多单向关联 多对一双向关联本讲目标 掌握Hibernate对象关系映射 多对一单向关联(重点) 多对一双向关联(重点) 一对一单向关联 一对一双向关联什么是关联关系 什么是关联关系 关联关系表示不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起 进行关联操作的好处 在Hibernate中关联关系表现在
2、所映射的表与表之间的关系,采用关联操作,能够使有关系的表之间保持数据的同步 关联操作能够使程序员在编写程序过程中,减少对多表操作代码的编写,并且优化了程序,提高了程序运行的效率。 实体关联关系 实体之间的关系 关联关系 通过一个对象持有另一个对象的实例 泛化关系 通过对象之间的继承方法来实现 类与类之间最普遍的关系就是关联关系 在UML 语言中,关联是有方向的关联关系的类型 在Hibernate中关联关系的类型 一对一关联 假设有两个实体,分别是客户对象(Customer)和客户身份对象(Certificate),它们之间就是一对一的关系。一个客户只能有一个身份,一个身份也只能对应一个客户。该
3、一对一关联可以分为两种,分别是以主键关联和以外键关联。 一对多关联/多对一关联 一对多和多对一关联分为单向关联和双向关联,在此,着重介绍双向关联。假设有两个实体,学生对象(Student)和班级对象(Clazz),一个班级可以有多个学生,表现为一对多的关系,一个学生只能属于某个特定的班级,表现为多对一的关系 。关联关系的类型 多对多关联 Hibernate关联关系中相对比较特殊的就是多对多关联,多对多关联与一对一关联和一对多关联不同,多对多关联需要另外一张映射表用于保存多对多映射信息。 由于多对多关联的性能不佳(由于引入了中间表,一次读取操作需要反复数次查询),因此在设计中应该避免大量使用。同
4、时,在对多对关系中,应根据情况,采取延迟加载机制来避免无谓的性能开销。关联关系的类型 多对多关系 多对多关联只有双向关联,假如有订单对象(Order)和产品对象(Product),一个订单可以对应多个产品,一个产品同样也可以对应多个订单,订单和产品的关系就属于多对多关联关系。 为表示它们之间的关系,还需建立一张订单产品关系表(Order_Product),这张表里只存储order表和product表的关联关系,并没有额外的内容。一对一外键单向关系映射 以客户和客户账户信息为例 一个客户拥有一个唯一的账户信息 一个账户信息只能属于某个特定客户 那客户与客户账户信息之间为一对一的关联关系 以下描述
5、一对一单向关系映射 在一对一关系映射中,我们可以将关系映射在关系中任何一方,如将关系映射在Customer方一对一外键单向关系映射 那么在一对一单向关系中,在关系的主控方即Customer的映射文件中,需要对关系进行映射: 一对一单向关系映射和多对一单向关系映射十分类似,需要在Custom.hbm.xml中作如下映射: 其中name指定属性名 Column指定外键 Unique指定当前关系为一对一一对一外键单向关系映射 在关系方,勿需做任何映射一对一外键双向关系映射 在一对一的外键双向关联中,关系的双方都需要进行关联一对一外键双向关系映射 同样在映射文件中也需要双方进行映射 外键所在方(主控方
6、),映射不变一对一外键双向关系映射 另外一方,需要添加如下映射信息 一对一外键双向关联 以外键关联的一对一,其实本质上变成了一对多的双向关联,编写时直接按照一对多和多对一的要求编写,最后在many-to-one这一边加上一个uique=“true”,说明它是一对多的特例。 one-to-one 节点有以下属性: cascade :操作级联(cascade)关系 constrained: 约束表明主控表的主键上是否存在一个外键(foreign key)对其进行约束。这个选项关系到save、delete等方法的级联操作顺序。默认为关联类的主键属性名。 一对一外键双向关联 级联(cascade)在H
7、ibernate映射关系中是个非常重要的概念。 可选值有 all:所有情况下均进行级联操作; none:所有情况下均不进行级联操作; save-update:在执行save-update时进行级联操作。 delete:在执行delete时进行级联操作。 它指的是当主控方执行操作时,关联对象(被动方)是否同步执行同一操作。 如对主控对象调用save-update或delete方法时,是否同时对关联对象被动方)进行save-update或delete。这里,当客户(Customer)被更新或者删除时,其所关联的订单(Order)同时被修改或者删除,因此,这里的级联关系设置为all。多对一单向关联关
8、系 以学生与班级为例 一个班级拥有多个学生 一个学生只属于某个特定的班级 那么学生和班级之间为一对多的关系 那么在进行关系映射时,可以在多方进行映射多对一单向关系映射 多对一的单向关系映射,需要在多端的映射文件中添加如下内容: 其中name指定属性名 其中column映射数据库中所对应的外键列多对一单向关系映射 在多对一单向关系映射中,一端无需进行映射单向多对一关联 在类与类之间各种各样的关系中,多对一的单向关联关系和关系数据库中的外键参照关系最匹配 单向多对一关联是最常见的单向关联关系 在租房系统中从街道到区的关联就是典型的多对一关联租房系统中街道和区的实体类public class Dis
9、trict implements java.io.Serializable private Long id; private String name; /* 默认的构造方法默认的构造方法 */ public District() /省略省略setter/getter方法方法区区public class Street implements java.io.Serializable private Long id; private District district; private String name; /* 默认的构造方法默认的构造方法 */ public Street() public
10、District getDistrict() return this.district; public void setDistrict(District district) this.district = district; / 省略部分省略部分setter/getter方法方法街道街道租房系统中街道和区的映射文件 District.hbm.xml Street.hbm.xml与与Street 对应的对应的street 表是通过表是通过district_id 的值关联至的值关联至district 表的表的设置关系的字段设置关系的字段设置关系的对象设置关系的对象many-to-onemany-
11、to-one元素常用属性 many-to-one 元素的常用属性属性含义和作用必须默认值name映射类属性的名称 Yclass关联类的完全限定名Ncolumn关联的字段Nnot-null设置关联的字段的值是否可以为空Nfalselazy指定关联对象是否使用延迟加载以及延迟加载的策略Nproxyfetch设置抓取数据的策略Nselect配置映射文件并测试 hibernate.cfg.xml中指定映射文件 测试 District district = new District();Street street1 = new Street();Street street2 = new Street()
12、;Street street3 = new Street();district.setName(丰台丰台); /设置区的名称设置区的名称street1.setName(广安路广安路); /设置街道名称设置街道名称street1.setDistrict(district); /设置街道所在区设置街道所在区street2.setName(大红门路大红门路);street2.setDistrict(district);street3.setName(南苑路南苑路);street3.setDistrict(district);设置街道和区设置街道和区SessionFactory sessionFact
13、ory = null;Session session = null;Transaction tx= null;try sessionFactory = new Configuration().configure().buildSessionFactory(); session = sessionFactory.openSession(); tx= session.beginTransaction(); session.save(district); session.save(street1); session.save(street2); session.save(street3); mit(
14、);catch (HibernateException e) tx.rollback(); e.printStackTrace(); finally session.close(); sessionFactory.close();添加街道和区添加街道和区一对多单向关联 以上为在多端进行关联的关系映射方式,下面说明在一端进行单向关联的映射方法一对多单向关联 一对多单向关联关系中,需要在一端的映射文件中加入如下内容:一对多单向关系 元素包括以下属性: name:设定待映射的持久化类的属性名,这里为Clazz类的students属性; lazy: 是否采用延迟加载。 inverse: 用于标识双向关
15、联中的被动方一端,inverse=false的一方(主控方)负责维护关联关系,默认值 为false。 cascade 操作级联(cascade)关系,可选值为all : 所有情况下均进行级联操作;none:所有情况下均不进行级联操作;save-update:在执行save-update时进行级联操作.setset元素的常用属性 set元素的常用属性属性含义和作用必须默认值name映射类属性的名称 Ytable关联类的目标数据库表Nlazy指定关联对象是否使用延迟加载以及延迟加载的策略Nproxyfetch设置抓取数据的策略Nselect一对多单向关联 元素还包含两个子元素: 元素设定与所关联的
16、持久化类对应的表的外键,此处为student表的cls_id 元素设定所关联的持久化类,此处为Student类。 双向一对多关联 单向一对多 单向多对一 同时配置两者就成了双向一对多关联一对多双向关联 一对多(多对一)双向关联是多对一单向关联和一对多单向关联的综合,在关系的双方都进行关联一对多双向关联多对一双向关联CRUD cascade属性 节点、节点以及节点拥有此属性 属性值有: all:所有情况下均进行级联操作; none:所有情况下均不进行级联操作; save-update:在执行save-update时进行级联操作。 delete:在执行delete时进行级联操作。 作用: 它指的是
17、当主控方执行操作时,关联对象(被动方)是否同步执行同一操作。inverseinverse属性 术语“inverse”直译为“反转” 在Hibernate 中,inverse属性指定了关联关系中的方向 关联关系中,inverse=false 的为主动方,由主动方负责维护关联关系 在一对多关联中,将one 方的inverse 设置为true,这将有助性能的改善inverse指的是关联关系的控制方向,而指的是关联关系的控制方向,而cascade指的是指的是层级之间的连锁操作层级之间的连锁操作 多对多关联关系 Hibernate关联关系中相对比较特殊的就是多对多关联,多对多关联与一对一关联和一对多关联
18、不同,多对多关联需要另外一张映射表用于保存多对多映射信息。 由于多对多关联的性能不佳(由于引入了中间表,一次读取操作需要反复数次查询),因此在设计中应该避免大量使用。同时,在对多对关系中,应根据情况,采取延迟加载机制来避免无谓的性能开销。多对多关联关系 如:教师和学生之间的关系 一个教师可以教多个学生 一个学生可以被多个教师教 那么学生和教师之间为多对多关系 那么在这里需要一个中间表来映射学生和教师之间的关系,如teachers_students 下面看下多对一的单向关联 在教师端进行关联多对多关联关系 多对多单向关联关系 需要在Teacher.hbm.xml做如下映射:多对多关联关系 多对多单向关联 Student.hbm.xml中无需做特别的映射多对多双向关联 多对多双向关联: 多对多双向关联需要在单向的基础上做如下改动: 为Student对象添加关联关系 为Student.hbm.xml做关联映射many-to-manymany-to-many关联 数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北师大版六年级下数学表格式教案
- 酶解法制备高效环保洗涤剂配方
- 森林经营实施方案
- 2024高中地理第二章地球上的大气第二节气压带和风带第1课时气压带和风带的形成学案新人教版必修1
- 2024高中物理第四章电磁感应章末质量评估含解析新人教版选修3-2
- 2024高中语文第三单元因声求气吟咏诗韵将进酒训练含解析新人教版选修中国古代诗歌散文欣赏
- 2024高中语文精读课文一第2课2鲁迅:深刻与伟大的另一面是平和二作业含解析新人教版选修中外传记蚜
- 2024高考化学一轮复习第2章元素与物质世界第6讲氧化还原反应的基本概念和规律学案
- 2024高考地理一轮复习专练58区域地理环境的差异和发展含解析新人教版
- 2025高考数学考二轮题型专项练3客观题8+3+3标准练(C)-专项训练【含答案】
- 北京市刑事诉讼律师事务所函(担任诉讼代理人适用)格式文书(2020版)
- XX镇“我为群众办实事”满意度调查问卷
- (完整版)Brownbear绘本
- 常用吗啡剂量滴定方法ppt课件
- 有关DPM的问题
- 石油石化用化学剂产品质量认可实施细则
- 木地板木基层隐蔽验收记录.doc
- 科室投诉及纠纷月总结会议记录.doc
- 大乘广智的涵义
- 五通一平施工组织设计图文
- 物流术语中英文对照大全10页
评论
0/150
提交评论