- 浏览: 269819 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
*
浅析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)
通行证: 密码: 注册通行证
发表评论请注意语言文明
验证码: 请点击后输入验证码 点击图片可刷新验证码 匿名发表
浅析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)
通行证: 密码: 注册通行证
发表评论请注意语言文明
验证码: 请点击后输入验证码 点击图片可刷新验证码 匿名发表
发表评论
-
如何使用hibernate
2012-05-24 19:21 0一、选择Hibernate还是iBATIS都有它的道理: H ... -
关于hibernate自动建表和主键的数据类型的关系
2012-02-27 16:18 1142要想让hibernate自动建表, 1、除了 <prop ... -
用Spring+Hibernate链接时,在增删改时会报错: Write operations are not allowed in read-only mod
2011-09-11 19:53 884用Spring+Hibernate链接时,在增删改时会报错: ... -
[转]hibernate延迟加载
2011-04-26 11:41 5672007-12-01 [转]hibernate延迟 ... -
Hibernate利用XDoclet自动生成配置文件
2011-04-18 18:34 801Hibernate利用XDoclet自动生 ... -
如何利用 myeclipse 生成Hibernate 配置文件
2011-04-18 18:13 1247在hibernate中,每个数据表对应的其实是一个实体类,每个 ... -
Hibernate Synchronizer是一个Eclipse插件,可以自动生成*.hbm文件、持久化类和DAOs
2011-04-18 18:00 1895Hibernate Synchronizer是一个Eclips ... -
Hibernate auto produce
2011-04-18 17:52 981Hibernate 中需要class和mapp ... -
使用动态代理实现用AOP对数据库进行操作
2011-04-12 14:11 947使用动态代理实现用AOP对数据库进行操作 2008-03-14 ... -
Hibernate中cascade与inverse属性详解
2011-04-01 16:20 938Hibernate中cascade与inverse属性详解 ... -
事务和事务边界
2011-03-31 15:44 101310.1.2 事务和事务边界 http://book.51ct ... -
事务传播行为种类
2011-03-31 15:31 821事务传播行为种类 Spring在TransactionDef ... -
Hibernate saveOrUpdate分析
2011-03-31 15:30 861* Hibernate s ... -
使用Spring AOP代理方式实现声明式事务的原理
2011-03-31 15:28 1205使用Spring AOP代理方式实 ... -
Hibernate Session缓存概述
2011-03-31 15:27 1006* Hibernate Session缓存 ... -
解说Hibernate的工作原理实例
2011-03-31 15:26 874* 解说Hibernate的工作原理实例 ... -
简述Hibernate配置连接池
2011-03-31 15:25 842* 简述Hiber ... -
简单解析J2EE数据持久层设计
2011-03-31 15:24 980* 简单解 ... -
浅析Hibernate Callback接口
2011-03-31 15:23 893* 浅析Hibernate Callbac ... -
概述Hibernate equals()方法
2011-03-31 15:22 768* 概述Hiber ...
相关推荐
主要介绍了Java的Hibernate框架中的缓存和延迟加载机制,Hibernate是注明的Java下SSH三大web开发框架之一,需要的朋友可以参考下
JavaScript预加载和延迟加载是两种优化网页性能的重要技术,它们主要针对JavaScript文件和资源的管理,以提升用户体验和页面加载速度。预加载是为了尽早获取所需资源,而延迟加载则是在需要时才开始加载,以此平衡...
标题"浅析Hibernate下数据批量处理方法"和描述中提到,早期的Hibernate在批量插入时可能存在效率问题,但最新版本已经进行了优化,例如通过设置`batch_size`参数来提高批量处理的性能。`batch_size`设置的是JDBC...
浅析编目延迟对图书老化影响.pdf 本文研究了编目延迟对图书老化的影响,提出了一种基于编目年龄的图书老化模型,并对比分析了两种时间序列统计方法下的图书老化指标。研究结果表明,编目延迟使图书的老化速度减慢,...
【标题】:“论坛系统 hibernate jsp hibernate 毕业论文项目” 【描述】:这个项目是一个基于Java技术栈的论坛系统实现,主要利用了Hibernate ORM框架与JSP(JavaServer Pages)进行开发,是适合学生作为毕业论文...
在Spring框架中,classpath加载配置文件是应用开发中常见的操作。Spring框架提供了灵活的方式来加载位于classpath中的XML配置文件,这对于项目的模块化和可维护性至关重要。本文将详细分析Spring通过classpath加载...
H5 缓存机制浅析 - 移动端 Web 加载性能优化
1. **延迟加载(Lazy Loading)**:Hibernate支持实体对象和集合的延迟加载,只有在真正需要时才加载数据,减少内存占用,提升性能。 2. **缓存机制**: - **一级缓存**:内部缓存,即Session级别的缓存,每个Session...
"深入浅析Mybatis与Hibernate的区别与用途" Mybatis和Hibernate都是orm数据库框架,但是它们有着很大的区别。在本文中,我们将对Mybatis和Hibernate的区别与用途进行详细的分析。 自动化程度 Mybatis是半自动的,...
调用方法 出现加载条 2.怎么实现进度条呢? 1) 在document.body 新增一个div.覆盖浏览器. 设置背景会灰色. z-index = 999. 加载的时候让用户无法修改界面值 2) 在document.body 新增一个动态的div. 代码实现: ...
### 浅析AMD、CMD与CommonJS规范——JavaScript模块化加载学习心得总结 #### 一、引言 在现代Web开发中,随着项目规模的不断扩大和技术复杂度的提高,JavaScript模块化成为了一种非常重要的编程实践。通过将复杂的...
包含多个域,每个域在加载和运行时可以有不同的地址。要生成这样的映像文件,必须通过 某种方式告知编译器相关的地址映射关系 2 基础知识 2.1 基本概念 要了解分散加载文件前首先需要对以下各个概念进行了解...
懒加载也叫延迟加载,即在需要的时候进行加载,随用随载。 二、为什么需要懒加载 在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,延时过长,不利于...
这里,我们再讨论一些常用的高级的控制反转容器(Inversion of Control containers):延迟加载(lazy-loading),生命周期管理(lifetime management),以及延迟的创建/处理(deferred creation/resolution)。 延迟...
JavaScript异步加载浅析 在Web开发中,JavaScript的加载方式对用户体验和页面性能有着显著影响。主要关注的两个核心问题是同步脚本和异步脚本的加载与执行顺序,以及由此带来的性能优化问题。 首先,同步脚本的...
浅析Android加载字体包及封装的方法 Android 加载字体包及封装是 Android 开发中的一项重要技术,涉及到字体包的加载和封装。本文将详细介绍 Android 加载字体包及封装的相关知识,并提供实例代码,以便读者更好地...
第一,`find()`方法会将所有查询结果加载到内存中,如果数据量大,可能会消耗大量内存。第二,提交事务时,Hibernate会为每个对象生成一个单独的`UPDATE`语句,这会导致大量的数据库访问,严重影响性能。 为了解决...
懒加载也就是延迟加载,不知道大家在工作中有没有发现,当你的SPA(单页应用程序)变得复杂时,打包构建后的Javascript包会变得非常大,以至于严重影响页面的加载时间。幸运的是:vue-router支持WebPack内置的异步...