




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
加载策略 课程目标 对象在Hibernate中的状态加载策略介绍lazy false 与fetch join 的区别inverse true insert false update false 对象在Hibernate中的状态 临时状态普通的Java对象 只是一个携带信息的载体没与session实例关联 没与数据库中记录关联持久状态持久实例在数据库中有对应的记录 并拥有持久化标识 持久实例可能是刚刚被保存 或刚刚被加载的数据脱管状态持久对象关联的Session关闭后 对象变为脱管 saveOrUpdate 举例说明对象状态 Sessionsession sessionFactory openSession 开启连接tx session beginTransaction 开启事务Employeeemp session get Employee class 123 根据主键加载emp setEmpName QQ 对持久对象进行更改 不需要更新session update emp 更新 此句没有必要mit session close emp setEmpName QQ1 对脱管对象进行更改Sessionsession2 sessionFactory openSession 开启连接tx session2 beginTransaction 开启事务session2 update emp pubicclassEmpDAO publicstaticEmployeegetEmployeeById Integerid Sessionsession sessionFactory openSession 开启连接tx session beginTransaction 开启事务Employeeemp Employee session get Employee class id 根据主键加载mit session close 忽略了异常处理returnemp Employeeemp EmpDAO getEmployeeById 10011 此时emp是什么状态 emp setEmpName AA 数据库中empName值是什么 加载策略介绍 我们知道 Hiberante是一个ORM工具 它使得我们能够直接去操纵对象而不是数据库中表 Hibernate的数据检索策略也是给予对对象的操作的 数据检索策略主要包括一下几种 立即加载 延迟加载 预先抓取和批量加载 其中前三个是统一级别的 三个当中智能选择其中一个 而批量加载则可以很好的整合前面三个 还有就是预先抓取和批量加载都是为了优化前面两种方式而形成的 同时对于配置文件中的某个属性一旦设为预先抓取 则其它的数据检索方式都对这个属性失效 下面分别进行讨论 1立即检索 立即检索的时候需要在配置文件添加属性lazy false 当Hibernate在从数据库中取得字段值组装好一个对象后 会立即再组装此对象所关联的对象 如果这个对象还有关联对象 再组装这个关联对象 对于一对一和多对一的多的这段默认是采用立即加载 所以不需要配置 多对多和一对多就要配置lazy false 2延迟加载 延迟加载不同 当组装完一个对象后 不立即组装和它关联的对象 多对多和一对多默认采用延迟加载 一对一和多对一想实现延迟加载得配置lazy true 3预先抓取 Hibernate2 x版本 outer join true Hibernate3 x版本 fetch join 和立即检索相比 预先抓取可以减少SQL语句的条数 提高查询速度 4批量加载 批量加载总是和立即加载或者延迟加载联系在一起的 分别为批量立即加载和批量延迟加载 Hibernate加载策略 为了提高效率 节省资源 提供了多种数据检索策略 立即加载 从数据库取得字段值组装好一个对象后 会立即从数据库取出关联的附属对象 脱离Session后仍可以使用这些附属对象立即加载的适用情况 加载对象时 马上就要用到附属对象的数据一对一 多对一被关联对象是 一 这端的立即加载的配置为lazy false 一对一 多对一默认就是立即加载 所以只有一对多 多对多的立即加载需要在元素中指定lazy false 延迟加载 从数据库取得字段值组装好一个对象后 并不会立即取出附属对象 这样做通常是为了节约内存资源因为一对多 多对多关系如果设置为立即加载 将有可能会加载很多的附属对象而占据大量内存 因此这种情况常设置为延迟加载多对一 一对一设置延迟加载只需在标签中设置lazy true 加载策略举例 一对一默认立即加载 一般不改动一对多默认延迟加载 通过设置lazy false 或fetch join 实现立即加载 但一般一对多尽量设成lazy true 当要实现立即加载时通过HQL语句的预先抓取joinfetch实现多对一默认延迟加载 通过设置lazy false 或fetch join 实现立即加载下面以部门加载员工 一对多 为例 部门对员工的加载策略配置如下 false 加载部门时立即加载员工true 加载部门时不加载员工 根据部门OID查找部门publicDepartmentgetDeptById Integeroid Sessionsession HibernateSessionFactory getSession Transactiontx session beginTransaction Departmentdept Department session get Depaertment class oid Setemps dept getEmployees 不过采用何种加载方式 这里没有错误mit session close returndept Setemps dept getEmployees 如果lazy true 这里将出错 显示部门详细信息 如果部门对员工采用的是延迟加载 那么这里将会出错 lazy false 与fetch join 的区别 1 lazy false 立即加载 一次只查一个表 产生语句过多 如果数据多的话查询效率较低2 fetch join 使用连接查询 减少查询次数 提交查询效率下面通过例子说明 lazy false 部门对员工采用lazy false 立即加载员工的配置及代码 publicstaticvoidmain Stringargs Sessionsession HibernateSessionFactory getSession Transactiontx session beginTransaction Departmentdept Department session get Department class 51 mit session close System out println 部门名称 dept getDeptName Setemps dept getEmployees for Iteratoriter emps iterator iter hasNext Employeeemp Employee iter next System out println 员工名字 emp getEmpName lazy false 执行main方法 得到控制台信息 fetch join 部门对员工采用fetch join 预先抓取员工的配置及代码 publicstaticvoidmain Stringargs Sessionsession HibernateSessionFactory getSession Transactiontx session beginTransaction Departmentdept Department session get Department class 51 mit session close System out println 部门名称 dept getDeptName Setemps dept getEmployees for Iteratoriter emps iterator iter hasNext Employeeemp Employee iter next System out println 员工名字 emp getEmpName fetch join 执行main方法 得到控制台信息 我们可以很明显的看出 查询同样的数据 采用fetch join 比用lazy false 少了两条语句 提高了查询效率 当然 数据量越多 减少的sql语句就越多这里还得注意 如果你使用了fetch join 那么HQL语句会忽略配置文件中的立即加载 当部门对员工fetch join 并且使用HQL语句 fromDepartment 不会取出员工 inverse属性 inverse属性表示将关系转由对方维护 session HibernateSessionFactory getSession 开启连接tx session beginTransaction 开启事务Departmentdept Department session get Departemt class oid dept getEmployees add emp inverse falsemit session HibernateSessionFactory getSession 开启连接tx session beginTransaction 开启事务Departmentdept Department session get Department class oid
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版区域经济合作与发展项目合作协议书范本
- 2025版石材环保检测及认证服务合同
- 2025柴油经销商招募与培训居间合同
- 2025年度绿色建筑项目施工合作协议合同范本
- 2025年度三个月期旅游公司短期劳动合同模板
- 2025电商合伙企业市场拓展与渠道建设合同
- 2025年度土地储备与开发项目工程监理合同范本
- 2025电厂检修外包服务合同专业品质保障
- 2025房地产项目认筹房屋质量检测与保修协议
- 2025年度三方股东合作开发环保节能技术合同
- 2025年人教版小学五年级下册奥林匹克数学竞赛试卷(附参考答案)
- 正常分娩接生操作流程
- 食品企业的自查自纠工作应如何开展 试题及答案
- 《箱式快装建筑设计、施工、验收规程》
- 固态电池成本控制-全面剖析
- 气道异物梗阻的急救
- 贵州省黔东南州2025年六年级下学期小升初招生数学试卷含解析
- 《企业财务舞弊探究的国内外文献综述》9000字
- 医院感染的疾病监测和报告制度
- 《食源性疾病与营养健康》课件
- 2025年威海桃威铁路有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论