使用@ManyToOne并延时加载出现的问题以及解决总结
来源:互联网 发布:中文翻译意大利语软件 编辑:程序博客网 时间:2024/06/05 02:56
出现的问题:
使用HIBERNATE的注解@ManyToOne(fetch = FetchType.lazy) 时候,报出错误
org.hibernate.LazyInitializationException: could not initialize proxy - no Sessionat org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)at com.evolution.warlock.entity.Department_$$_javassist_1.getName(Department_$$_javassist_1.java)at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180)at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267)at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198)
造成这个问题的原因:
fetch=FetchType.LAZY就等于打开了延迟加载,
Hibernate中的get方法不论是否开启延迟加载都会一次加载所有基本数据类型属性的值,
而load则不同,开启延迟加载后load(id),返回的对象会被Hibernate加一个壳(持久化上下文中没有缓存该对象的前提下),拦截所有非id属性的访问操作(getter,setter调用),
只有id属性中有实际值(其实就是你调用load方法时传的那个),在session没有关闭的之前,如果访问除id外的其他属性才会发sql语句去查询,
这个错误就是因为在当前session关闭以后访问由load()加载的对象的非id属性,此时Hibernate尝试通过当前session发sql查询,但发现session已经关闭,这样才会报错。
测试发现的确是上面所说的,LAZY阻挡了除ID以外的所有访问,所以解决的办法就很多,
一.就是只拿ID,再从数据库从新拿一次你需要的东西。
二.将FetchType.lazy 改成 EAGER
三.配置xml (没试过)
在web.xml配置:
<filter> <filter-name>openSessionInView</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping> <filter-name>openSessionInView</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
四.在service层使用Hibernate.initialize()将你需要的对象从新持久化
原文地址:
http://wxynxyo.iteye.com/blog/2007415阅读全文
0 0
- 使用@ManyToOne并延时加载出现的问题以及解决总结
- Fragment的延时加载以及出现的问题
- Spring使用OpenSessionInViewFilter解决Hibernate的lazy延时加载问题
- Spring使用OpenSessionInViewFilter解决Hibernate的lazy延时加载问题
- Spring使用OpenSessionInViewFilter解决Hibernate的lazy延时加载问题
- Spring使用OpenSessionInViewFilter解决Hibernate的lazy延时加载问题
- Spring使用OpenSessionInViewFilter解决Hibernate的lazy延时加载问题
- Spring使用OpenSessionInViewFilter解决Hibernate的lazy延时加载问题
- Spring使用OpenSessionInViewFilter解决Hibernate的lazy延时加载问题
- Multisim使用中出现的问题以及解决
- OpenSessionInViewFilter解决Hibernate延时加载问题
- VC 中使用双缓冲以及出现的问题总结
- 解决Toast的延时问题
- ManyToOne的xml配置 及 解决N+1问题
- Mybatis的OneToMany,ManyToOne和解决N+1查询问题
- 解决Hibernate延迟加载出现的问题
- 使用jquery的load方法设计动态加载,并解决被加载页面JavaScript失效问题
- 关于ExtJs使用GridPanel延时加载问题
- 关于微信支付返回-1的浅谈
- java验证码识别--5
- Java中线程池ExecutorService详细
- paper-image/video segmentation
- 作业(Job)内核对象
- 使用@ManyToOne并延时加载出现的问题以及解决总结
- jQuery学习笔记——流水账part2
- RCNN用到的SelectiveSearch的理解笔记
- 记录
- okHttp的简单封装使用
- 加密软件的未来发展方向 自动备份功能应该成为一种标准
- ZKFailoverController( zkfc)介绍
- Python爬虫利器:BeautifulSoup库
- php中多维数组排序