Web程序中的懒加载异常说明及解决方案

所谓懒加载(lazy)就是延时加载,延迟加载。
什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载。
至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,
因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,
我们让数据在需要的时候才进行加载,这时我们就用到了懒加载。懒加载的异常有很多种,你指的是不是session已经关闭的异常?因为那个初学者最容易遇到情况是当你加载出一个一对多关系的一这端的对象,然后在出了事务之后的地方,比如页面上,还想再获取多端对象里面的除了id以外的属性的时候,就会跑出这个异常。我举个例子,你有一个 Grade 对象关联了 很多 Student 对象,并且用的是懒加载你在service里面通过数据库查询获得了一个 Grade对象,这个对象里面有一个Set<Student> students 集合,但是你并没有对这个对象做进一步的处理(比如 intialize之类的操作让懒加载的代理对象真正去实例化)然后你到了页面的展示的时候,去遍历 students 这个集合,并且你试图在页面上显示每个 student 的 name 属性(这个属性不是studentId) 这个时候就会抛出session已经关闭的异常

在SSH框架中:可直接可以使用OpenSessionInViewFilter
在配置文件中配置
1 <filter-name>opensession</filter-name>
2         <filter-class>       org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
3       </filter-class>
4 <filter-mapping>
5      <filter-name>opensession</filter-name>
6    <url-pattern>*.action</url-pattern>
7 </filter-mapping> 


 
时间: 2024-11-05 22:48:42

Web程序中的懒加载异常说明及解决方案的相关文章

系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构

系统管理模块_部门管理_设计本模块中的所有实体并总结设计实体的技巧 设计实体流程 1,有几个实体? 一般是一组增删改查对应一个实体. 2,实体之间有什么关系? 一般是页面引用了其他的实体时,就表示与这个实体有关联关系. 3,每个实体中都有什么属性? 1,主键.推荐使用代理主键 2,关联关系属性.在类图中,关联关系是一条线,有两端,每一端对应一个表达此关联关系的属性.有几个端指向本类,本类中就有几个关联关系属性. 3,一般属性.分析所有有关的页面,找出表单中要填写的或是在显示页面中要显示的信息等.

web中的懒加载

在Web应用程序中,系统的瓶颈常在于系统的响应速度.如果系统响应速度过慢,用户就会出现埋怨情绪,系统的价值也因此会大打折扣.因此,提高系统响应速度,是非常重要的. Web应用程序做的最多就是和后台数据库交互,而查询数据库是种非常耗时的过程.当数据库里记录过多时,查询优化更显得尤为重要.为了解决这种问题,有人提出了缓存的概念.缓存就是将用户频繁使用的数据放在内存中以便快速访问.在用户执行一次查询操作后,查询的记录会放在缓存中.当用户再次查询时,系统会首先从缓存中读取,如果缓存中没有,再查询数据库.

Hibernate懒加载异常说明及其解决方法

在集成ssh2三大框架的时候很容易就会造成懒加载异常,通常显示的错误信息是: org.hibernate.LazyInitializationException: could not initialize proxy - no Session 懒加载异常出现的原因: 我们在Action中调用Service中的方法,方法中开始时open session,当调用结束后close session,例如类User中有一个Department属性,我们使用Hibernate查询一个User时,hibern

Hibernate懒加载异常的解决与深刻分析

出现原因: Hibernate允许对关联对象及属性延迟加载,前提是这个操作在同一个Hibernate session范围内进行.如果发生这样的情况,当service层返回了一个启用延迟加载功能的domain对象给web层,而web层访问到这些需要延迟加载的对象或属性时,由于加载domain对象的session已经关闭导致无法访问,就会出现访问异常. 解决方法: 我们可以使用一个过滤器,在web请求时给它绑定一个Hibernatesession,这样就可以保证整个请求的过程中session都是开启

SSH之懒加载异常解决方案

1.设置成即时加载 2.查询语句使用join fetch from Coupon coupon  left join fetch coupon.users  where coupon.id=:id coupon的List<users> users属性是懒加载,但是查询结果需要users的内容,则使用 left join fetch 3.使用OpenSessionInViewFilter过滤器 web.xml <!-- 以下是Spring的OpenSessionInView实现 ,唯一要求

懒加载异常 处理方法

首先看一下什么是懒加载: 所谓懒加载(lazy)就是延时加载,延迟加载. 什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载. 至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗, 我们让数据在需要的时候才进行加载,这时我们就用到了懒加载. 比如部门ENTITY和员工ENTITY,部门与员工1对多,如果lazy设置为 false,那么只要加载了一个部门的po,就会根据一对多配置的关系把所有员工的po也加载出来

解决hibernate中的懒加载(延迟加载)问题

解决hibernate中的懒加载(延迟加载)问题 我们在开发的时候经常会遇到延迟加载问题,在实体映射时,多对一和多对多中,多的一样的属性默认是lazy="true"(即,默认是延迟加载), 如:<many-to-one name="parent" class="Department" column="parentId" lazy="true"/> 延迟加载表现在:比如:我们要查询id为2的部门数

Hibernate懒加载异常解决方案总结

[什么是Hibernate懒加载异常] 我们所说的懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的时候才会访问数据库,可以有效的降低数据库访问次数和内存使用量.懒加载为Hibernate中比较常用的特性之一,Hibernate 通过默认采取懒加载机制来降低系统的内存开销,提高系统性能.但这也使很多初学者使用Hibernate时容易出现懒加载异常. [出现懒加载异常的原因] 这个异常出现的原因主要是使用懒加载机制加载数据时,hibernate在从数据库

SpringBoot JPA懒加载异常 - com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy

问题与分析 某日忽然发现在用postman测试数据时报错如下: com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy [com.cbxsoftware.cbx.attachment.entity.RefAttachment#c109ec36e60c4a89a10eabc72416d984] - no Session (through reference chain: com.cbxsoftw