`
xgbjmxn
  • 浏览: 269821 次
  • 性别: Icon_minigender_1
  • 来自: 新乡
社区版块
存档分类
最新评论

浅析Hibernate延迟加载

阅读更多
    *
      浅析Hibernate延迟加载
    * http://developer.51cto.com  2009-09-24 11:41  佚名  IT168  我要评论(0)

      这里介绍Hibernate延迟加载,这种初始化策略只在一个对象调用它的一对多或多对多关系时才将关系对象读取出来。

      Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate延迟加载,包括介绍在Web层进行延迟加载等方面。

      Hibernate延迟加载

      Hibernate对象关系映射提供延迟的与非延迟的对象初始化。非延迟加载在读取一个对象的时候会将与这个对象所有相关的其他对象一起读取出来。这有时会导致成百的(如果不是成千的话)select语句在读取对象的时候执行。这个问题有时出现在使用双向关系的时候,经常会导致整个数据库都在初始化的阶段被读出来了。当然,你可以不厌其烦地检查每一个对象与其他对象的关系,并把那些最昂贵的删除,但是到最后,我们可能会因此失去了本想在ORM工具中获得的便利。

      一个明显的解决方法是使用Hibernate延迟加载机制。这种初始化策略只在一个对象调用它的一对多或多对多关系时才将关系对象读取出来。这个过程对开发者来说是透明的,而且只进行了很少的数据库操作请求,因此会得到比较明显的性能提升。这项技术的一个缺陷是延迟加载技术要求一个 Hibernate会话要在对象使用的时候一直开着。这会成为通过使用DAO模式将持久层抽象出来时的一个主要问题。为了将持久化机制完全地抽象出来,所有的数据库逻辑,包括打开或关闭会话,都不能在应用层出现。最常见的是,一些实现了简单接口的DAO实现类将数据库逻辑完全封装起来了。一种快速但是笨拙的解决方法是放弃DAO模式,将数据库连接逻辑加到应用层中来。这可能对一些小的应用程序有效,但是在大的系统中,这是一个严重的设计缺陷,妨碍了系统的可扩展性。

      在Web层进行延迟加载

      幸运的是,Spring框架为Hibernate延迟加载与DAO模式的整合提供了一种方便的解决方法。以一个Web应用为例,Spring提供了 OpenSessionInViewFilter和 OpenSessionInViewInterceptor。我们可以随意选择一个类来实现相同的功能。两种方法唯一的不同就在于interceptor 在Spring容器中运行并被配置在web应用的上下文中,而Filter在Spring之前运行并被配置在web.xml中。不管用哪个,他们都在请求将当前会话与当前(数据库)线程绑定时打开Hibernate会话。一旦已绑定到线程,这个打开了的Hibernate会话可以在DAO实现类中透明地使用。这个会话会为延迟加载数据库中值对象的视图保持打开状态。一旦这个逻辑视图完成了,Hibernate会话会在Filter的doFilter方法或者Interceptor的postHandle方法中被关闭。

      实现方法在web.xml中加入

         1. <filter>
         2. <filter-name>hibernateFilter</filter-name>
         3. <filter-class>
         4. org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 
         5. </filter-class>
         6. </filter
         7. <filter-mapping>
         8. <filter-name>hibernateFilter</filter-name>
         9. <url-pattern>*.do</url-pattern>
        10. </filter-mapping>

      【编辑推荐】
         1. Hibernate连接配置方法剖析
         2. Hibernate Session实例剖析
         3. 浅析Hibernate Callback接口
         4. Hibernate Session缓存概述
         5. Hibernate修改addMate方法
      【责任编辑:志京 TEL:(010)68476606】

原文:浅析Hibernate延迟加载
    标 签:  Hibernate延迟加载

上一篇: 简述Hibernate三种查询的应用 下一篇: 对Hibernate Formula作用的全析
网友评论
查看所有评论(0)
通行证: 密码:   注册通行证
发表评论请注意语言文明

验证码: 请点击后输入验证码 点击图片可刷新验证码 匿名发表
分享到:
评论

相关推荐

    浅析Java的Hibernate框架中的缓存和延迟加载机制

    主要介绍了Java的Hibernate框架中的缓存和延迟加载机制,Hibernate是注明的Java下SSH三大web开发框架之一,需要的朋友可以参考下

    浅析js预加载/延迟加载

    JavaScript预加载和延迟加载是两种优化网页性能的重要技术,它们主要针对JavaScript文件和资源的管理,以提升用户体验和页面加载速度。预加载是为了尽早获取所需资源,而延迟加载则是在需要时才开始加载,以此平衡...

    浅析Hibernate下数据批量处理方法.doc

    标题"浅析Hibernate下数据批量处理方法"和描述中提到,早期的Hibernate在批量插入时可能存在效率问题,但最新版本已经进行了优化,例如通过设置`batch_size`参数来提高批量处理的性能。`batch_size`设置的是JDBC...

    浅析编目延迟对图书老化影响.pdf

    浅析编目延迟对图书老化影响.pdf 本文研究了编目延迟对图书老化的影响,提出了一种基于编目年龄的图书老化模型,并对比分析了两种时间序列统计方法下的图书老化指标。研究结果表明,编目延迟使图书的老化速度减慢,...

    论坛系统 hibernate jsp hibernate 毕业论文项目

    【标题】:“论坛系统 hibernate jsp hibernate 毕业论文项目” 【描述】:这个项目是一个基于Java技术栈的论坛系统实现,主要利用了Hibernate ORM框架与JSP(JavaServer Pages)进行开发,是适合学生作为毕业论文...

    Spring中使用classpath加载配置文件浅析

    在Spring框架中,classpath加载配置文件是应用开发中常见的操作。Spring框架提供了灵活的方式来加载位于classpath中的XML配置文件,这对于项目的模块化和可维护性至关重要。本文将详细分析Spring通过classpath加载...

    H5 缓存机制浅析 - 移动端 Web 加载性能优化.pdf

    H5 缓存机制浅析 - 移动端 Web 加载性能优化

    浅析java程序中hibernate的应用总结

    1. **延迟加载(Lazy Loading)**:Hibernate支持实体对象和集合的延迟加载,只有在真正需要时才加载数据,减少内存占用,提升性能。 2. **缓存机制**: - **一级缓存**:内部缓存,即Session级别的缓存,每个Session...

    深入浅析Mybatis与Hibernate的区别与用途

    "深入浅析Mybatis与Hibernate的区别与用途" Mybatis和Hibernate都是orm数据库框架,但是它们有着很大的区别。在本文中,我们将对Mybatis和Hibernate的区别与用途进行详细的分析。 自动化程度 Mybatis是半自动的,...

    浅析JS异步加载进度条

    调用方法 出现加载条 2.怎么实现进度条呢? 1) 在document.body 新增一个div.覆盖浏览器. 设置背景会灰色. z-index = 999. 加载的时候让用户无法修改界面值 2) 在document.body 新增一个动态的div. 代码实现: ...

    浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结.docx

    ### 浅析AMD、CMD与CommonJS规范——JavaScript模块化加载学习心得总结 #### 一、引言 在现代Web开发中,随着项目规模的不断扩大和技术复杂度的提高,JavaScript模块化成为了一种非常重要的编程实践。通过将复杂的...

    周立功单片机:分散加载文件浅释.pdf

    包含多个域,每个域在加载和运行时可以有不同的地址。要生成这样的映像文件,必须通过 某种方式告知编译器相关的地址映射关系 2 基础知识 2.1 基本概念 要了解分散加载文件前首先需要对以下各个概念进行了解...

    vue2组件实现懒加载浅析

    懒加载也叫延迟加载,即在需要的时候进行加载,随用随载。 二、为什么需要懒加载 在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,延时过长,不利于...

    浅析AngularJS中的生命周期和延迟处理

    这里,我们再讨论一些常用的高级的控制反转容器(Inversion of Control containers):延迟加载(lazy-loading),生命周期管理(lifetime management),以及延迟的创建/处理(deferred creation/resolution)。   延迟...

    JavaScript异步加载浅析

    JavaScript异步加载浅析 在Web开发中,JavaScript的加载方式对用户体验和页面性能有着显著影响。主要关注的两个核心问题是同步脚本和异步脚本的加载与执行顺序,以及由此带来的性能优化问题。 首先,同步脚本的...

    浅析Android加载字体包及封装的方法

    浅析Android加载字体包及封装的方法 Android 加载字体包及封装是 Android 开发中的一项重要技术,涉及到字体包的加载和封装。本文将详细介绍 Android 加载字体包及封装的相关知识,并提供实例代码,以便读者更好地...

    Hibernate批量更新与删除实例浅析

    第一,`find()`方法会将所有查询结果加载到内存中,如果数据量大,可能会消耗大量内存。第二,提交事务时,Hibernate会为每个对象生成一个单独的`UPDATE`语句,这会导致大量的数据库访问,严重影响性能。 为了解决...

    Vue.js如何实现路由懒加载浅析

    懒加载也就是延迟加载,不知道大家在工作中有没有发现,当你的SPA(单页应用程序)变得复杂时,打包构建后的Javascript包会变得非常大,以至于严重影响页面的加载时间。幸运的是:vue-router支持WebPack内置的异步...

Global site tag (gtag.js) - Google Analytics