博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
懒加载错误的三种处理方案
阅读量:4151 次
发布时间:2019-05-25

本文共 1341 字,大约阅读时间需要 4 分钟。

懒加载错误
Exception occurred during processing request: org.hibernate.LazyInitializationException: 
failed to lazily initialize a collection of role: cn.itcast.bos.domain.base.Courier.fixedAreas,
could not initialize proxy - no Session
org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException: 
failed to lazily initialize a collection of role: cn.itcast.bos.domain.base.Courier.fixedAreas, 
could not initialize proxy - no Session
第一种解决方案:在getFixedAreas方法上加上@JSON(serialize = false)
@JSON(serialize = false)
public Set<FixedArea> getFixedAreas() {
return fixedAreas;
}
只要加上了@JSON(serialize = false),返回的数据格式里不会含有fixedAreas字段及数据,
可以理解为过滤掉了fixedAreas数据
第二种解决方案:在web.xml中配置,延长EntityManager的生命周期,类似Hibernate里面延长Sesseion的生命周期
<filter>
<filter-name>OpenEntityManagerInView</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenEntityManagerInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第三种解决方案:不配置OpenEntityManagerInViewFilter,不配置@JSON(serialize = false),设置为立即加载
@ManyToMany(mappedBy = "couriers",fetch=FetchType.EAGER)
private Set<FixedArea> fixedAreas = new HashSet<>();
此时,返回的数据格式里有fixedAreas字段及数据
获取A对象时,A对象关联B对象,FetchType默认是立即加载
获取A对象时,A对象关联B对象的集合,FetchType默认是懒加载
总结:不管是Hibernate还是JPA,有加载策略的问题,都是基于性能的考虑

转载地址:http://salti.baihongyu.com/

你可能感兴趣的文章
Spring MVC中使用Thymeleaf模板引擎
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
Mysql复制表以及复制数据库
查看>>
Linux分区方案
查看>>
如何使用 systemd 中的定时器
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>