懒加载异常:org.hibernate.LazyInitializationException: could not initialize proxy - no Session 收藏
Hibernate的Lazy初始化1:n关系时,必须保证是在同一个Session内部使用这个关系集合,不然Hiernate将抛出异常。
两种处理方法:
一、这是延时加载的问题,把有关联的所有pojo类,在hibernate.cfg.xml文件中。一般在many-to-one中,set标签内中设lazy="false" 。
二、用OpenSessionInViewFilter过滤器,注意hibernateFilter过滤器和struts2过滤器在映射时的先后顺序。同时要配置事物处理,否则会导致session处于只读状态而不能做修改、删除的动作。
即在web.xml文件中如下配置:
<!-- Spring ApplicationContext配置文件的加载目录。 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/applicationContext.xml</param-value>
</context-param>
<!-- 解决延迟加载的问题 -->
<!-- 解决hibernate数据延迟加载时的no session错误 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 继承Struts2的FilterDispatcher类,具备GBK等编码设定功能与struts2的action过滤功能。 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class> com.iman.nrms.opm.web.common.FilterDispatcher
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class> org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Hibernate允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个Hibernate Session范围之内进行。如果Service层返回一个启用了延迟加载功能的领域对象给Web层,当Web层访问到那些需要延迟加载的数据时,由于加载领域对象的Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常。而Spring为我们提供的OpenSessionInViewFilter过滤器为我们很好的解决了这个问题。OpenSessionInViewFilter的主要功能是使每个请求过程绑定一个Hibernate Session,即使最初的事务已经完成了,也可以在Web层进行延迟加载的操作。OpenSessionInViewFilter过滤器将Hibernate Session绑定到请求线程中,它将自动被Spring的事务管理器探测到。所以OpenSessionInViewFilter适用于Service层使用HibernateTransactionManager或JtaTransactionManager进行事务管理的环境,也可以用于非事务只读的数据操作中。
request-->open session-->打开连接、开始事务-->持久操作-->渲染(关闭连接、session)-->response 其中一些过程省略了,不是很关心。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/maxracer/archive/2010/03/09/5358711.aspx
分享到:
相关推荐
### 懒加载异常解决知识点 #### 一、懒加载技术概述 懒加载(Lazy Loading)是一种按需加载策略,在程序设计中广泛应用于减少内存占用和提高系统性能。在Java开发中,尤其针对数据库操作频繁的应用场景,如...
- 懒加载可能导致“懒加载异常”(LazyInitializationException),即在Session关闭后尝试访问懒加载属性时,由于没有有效的Session,无法执行数据库查询。因此,开发者需要确保在Session的有效期内访问懒加载属性...
在处理JSON格式的数据时,Struts2可能会遇到懒加载异常,这通常与Hibernate的懒加载机制有关。懒加载是一种优化策略,用于推迟对关联对象的加载,直到真正需要它们时才进行加载。当尝试访问这些未加载的关联对象时,...
当我们处理大量数据时,一次性加载所有节点可能会导致性能问题,这时就需要用到“懒加载”(Lazy Loading)技术。 懒加载是一种优化策略,它只在需要时才加载数据,而不是一次性加载所有数据。对于Java Swing的`...
在构建大型单页面应用(SPA)时,为了提高用户体验和页面加载速度,常常会使用到滚动懒加载技术。"Vue的轻量级滚动懒加载插件"就是针对这一需求而设计的,它能够有效地优化网页性能,特别是对于图像密集型的网站,...
3. **注意使用场景**:懒加载只适用于在事务范围内操作,因为一旦事务结束,Session就会关闭,这时候再尝试访问懒加载的属性会抛出异常。 **五、懒加载的优缺点** 优点: 1. 减少内存消耗,仅在需要时加载数据。 2...
懒加载(Lazy Loading)是Fragment优化的一种策略,主要用于提高应用性能和用户体验,尤其是当Fragment包含大量的数据或者复杂的视图时。本教程将深入探讨Fragment的懒加载及其实践。 首先,理解懒加载的概念:懒...
尽管延迟加载有诸多优点,但也会带来一些问题,比如“懒加载异常”(LazyInitializationException)。当会话关闭后,尝试访问懒加载的关联对象时,会出现此异常,因为此时已经没有有效的Session来执行数据库查询。 ...
如果Session在实际访问懒加载属性之前已经关闭,那么将会抛出异常,无法执行数据库查询。 - 在多线程环境下,懒加载可能引发并发问题,因为不同线程可能会同时尝试加载同一个属性,导致不必要的额外数据库查询。 -...
在现代Web开发中,为了提供更好的用户体验,尤其是在移动端,我们经常使用Ajax上拉懒加载列表。这个技术允许用户滚动页面时,数据动态加载,而无需等待整个页面刷新。"ajax上拉懒加载列表(适用于移动端)"这个项目...
在Vue.js应用中,路由懒加载是一种优化技术,它允许我们仅在用户访问特定路由时才加载对应的组件,而不是一次性加载整个应用。这种方式可以显著减少初始加载时间,提高用户体验。然而,在实现过程中可能会遇到一些...
此外,由于懒加载通常依赖于代理对象,因此必须确保在事务范围内访问这些关系,否则可能会遇到“懒加载异常”。 五、注意事项 1. 懒加载可能导致N+1查询问题,即在获取父实体后,每次遍历子实体都会触发一次额外的...
3. **初始化懒加载集合**:讨论何时及如何初始化懒加载集合,包括在实体加载后首次访问集合,以及在Session关闭后尝试访问集合导致的“懒加载异常”。 4. **N+1查询问题**:解释在不恰当使用懒加载时可能出现的问题...
在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,延时过长,不利于用户体验,而运用懒加载则可以将页面进行划分,需要的时候加载页面,可以有效的...
3. **性能考虑**:根据业务需求选择合适的加载策略,EAGER可能会导致N+1查询问题,LAZY则可能导致懒加载异常。 4. **级联操作**:谨慎使用级联操作,防止数据意外删除或更新。 5. **反向映射**:如果两个实体相互...
"scrollLoad_MingGe2.54 懒加载插件,滚动加载" 这个标题揭示了我们正在讨论的是一款名为 "MingGe2.54" 的滚动加载插件,它专注于实现网页内容的懒加载功能。这意味着,当用户滚动页面时,内容会按需加载,而不是一...
对于延迟加载,可能会通过示例展示如何在实际场景中触发关联数据的加载,以及如何在不恰当的地方使用延迟加载可能导致的"懒加载异常"(LazyInitializationException)。 总的来说,这个自学视频将帮助你掌握如何在...
此外,还可以通过调整设计来避免懒加载异常,比如将数据一次性加载完全(即禁用懒加载),或者使用Eager Loading(即时加载)策略,将关联对象一起加载。然而,这种方法可能会增加数据库查询的复杂性和性能开销,...
在Android应用开发中,懒加载机制是一个重要的性能优化策略,特别是在处理复杂的页面布局,如多层Fragment嵌套和ViewPager结合使用时。懒加载允许我们仅在需要时加载数据和资源,从而提高应用性能,减少不必要的内存...
这样做的好处是在处理请求的过程中,所有的持久化对象都是可用的,从而避免了懒加载异常。配置中的*.do表示这个过滤器只作用于以.do结尾的请求。 知识点三:@OneToMany注解和@ManyToOne注解 在描述中提到了使用@...