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中加入
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
分享到:
相关推荐
在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而这里的"ssh 分页代码(延迟加载)"指的是在SSH框架下实现分页查询时采用的延迟加载技术。延迟加载是一种优化策略,它允许我们在...
SSH(Spring、Struts2、Hibernate)是一个经典的Java EE开发框架,其中SSH inte2模板是Struts2与Hibernate集成的一种方式。在这个主题中,我们主要关注的是如何在使用SSH inte2模板时处理“延迟加载”问题,以及相关...
主要介绍了Java的Hibernate框架中的缓存和延迟加载机制,Hibernate是注明的Java下SSH三大web开发框架之一,需要的朋友可以参考下
SSH(Struts、Spring、Hibernate)是Java Web开发中常见的三大框架,而Hibernate作为ORM(对象关系映射)框架,是连接Java应用程序与数据库的关键组件。本总结将围绕Hibernate的核心概念、配置、对象状态、关系映射...
- `javassist-3.12.0.GA.jar`:这是一个字节码操作库,Hibernate使用它来动态生成类,实现延迟加载和CGLIB代理等功能。 - `commons-collections-3.1.jar`:Apache Commons Collections提供了一组高级集合框架,如...
7. **延迟加载**:Hibernate的懒加载机制,只有当真正需要访问关联对象时,才会发起数据库查询,有效避免了“n+1”查询问题。 8. **事务管理**:在SSH框架中,Spring负责事务管理,可以设置不同的事务隔离级别和...
SSH延迟加载(Lazy Loading)是Java开发中Spring、Struts和Hibernate这三大框架结合使用时,Hibernate提供的一种优化数据加载的策略。它允许我们在需要的时候才加载关联的对象或集合,而不是在初始加载实体时就一并...
8. **javassist-*.jar**:Hibernate使用这个库来动态修改类的字节码,以实现延迟加载(Lazy Loading)和其他高级特性。 9. **dom4j-*.jar** 和 **xml-apis-*.jar**:XML处理库,用于解析和处理Hibernate的配置文件...
标题中的“ssh分页代码(没有延迟加载)”指的是在SSH(Struts2、Spring、Hibernate)框架下实现的一种分页功能,但不采用延迟加载(lazy loading)技术。延迟加载是一种优化策略,通常用于数据库操作,只在真正需要...
关于“Hibernate延迟加载_懒加载具体应用”,这是Hibernate的一个重要特性。当你声明一个实体的一对多或一对一关系为“懒加载”时,不会在获取主对象时立即加载关联对象,而是在第一次访问这些关联对象时才发起...
SSH,即Struts、Spring和Hibernate,是Java开发中常用的一种技术栈,主要用于构建企业级应用。这三种框架分别在MVC模式中的表现层、业务层和服务层起到关键作用。以下是对SSH面试题中涉及的一些核心知识点的详细解释...
8. **延迟加载**:Hibernate的懒加载策略可以在需要时才加载关联对象,提高系统性能。 9. **事件监听器**:允许自定义事件监听器来扩展Hibernate的功能,如在对象保存或更新时触发某些操作。 10. **类型转换**:...
在Java EE开发中,尤其是SSH(Struts、Spring、Hibernate)框架集成使用时,Hibernate扮演着至关重要的角色。这篇“Hibernate3.6中文API帮助文档”提供了详尽的指引,帮助开发者更好地理解和应用Hibernate 3.6版本的...
- Hibernate支持延迟加载(Lazy Loading),提高性能,只在需要时加载数据。 - 使用SessionFactory和Session接口进行数据库会话管理,支持HQL(Hibernate Query Language)和SQL进行查询。 3. **Struts2框架**: ...
在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,与Spring进行集成,可以实现声明式事务管理,并且可以借助Spring的IoC容器管理SessionFactory和Session,进一步提升应用的可维护性和灵活性。...
同时,Hibernate支持延迟加载(Lazy Loading),避免了内存中的数据过多导致的性能问题。 在实际开发中,结合Spring和Struts使用SSH框架,可以构建出松耦合、可维护性高的企业级应用。Spring负责管理对象生命周期和...
11. **延迟加载(Lazy Loading)**: 非主动加载关联对象,直到实际使用时才加载,提高性能。 12. **实体状态**: Hibernate识别四种实体状态:瞬时、持久化、托管和脱管,对应不同的生命周期。 13. **实体关系**: ...
当 Hibernate 在查询数据的时候,数据并没有存在于内存中,当程序真正对数据的操作时,对象才存在于内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 三、Hibernate 中怎样实现类...
Struts2、Hibernate4和Spring3的SSH2框架组合是Java Web开发中广泛采用的一种技术栈,用于构建高效、模块化的应用程序,特别是企业级的房屋管理系统。SSH2代表了Struts2(MVC框架)、Hibernate4(ORM框架)和Spring3...