could not initialize proxy - no Session
来源:互联网 发布:淘宝附近的人在哪查看 编辑:程序博客网 时间:2024/06/05 08:27
今天写一个小项目的时候,遇到了标题所示问题,could not initialize proxy - no Session,刚开始没有太在意,以为是方法使用错了,于是更改了一个方法,还是一样的问题,我知道肯定是hibernate哪边的配置写错了,检查了一遍,没发现,看来自己水平不够啊,只能求助GOOGLE大神了,于是搜到了下面的解决办法,轻松搞定,和大家分享下吧。
在<many-to-on>中这错误很常见,字面意义就是不能被初始化,因为session已经关闭了。
简单理解就是因为,你使用了lazy=true,这样hibernate在从数据库中调数据的时候是不会把关联的对象查出来的,而是保存一个获取值得方法,在你使用getXXX()调用的时候,hiberante会利用这个保存的方法去从数据库中取数据。而往往我们在jsp页面中使用getXXX()准备展示数据的时候,session早已经在dao中就关闭了,我们该如何解决这种异常呢?
简单的说有三种:
1.把lazy设成false,最2的办法,但是最简单,简单就是美嘛,也依然会有很多再使用这个方式再解决类似问题。
2.我没试过,但听说过,应该可行。
在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>
3.我用的方法,也是我认为比较不错的方法,灵活性更好。用left join fetch或inner join fetch语法。
例如:from Item i left join fetch i.parentItem ii
解释一下Item表是一个自关联的表,它的关联关系在hbm.xml中配置好了。
如下:
程序代码
<many-to-one name="parentItem" lazy="false" fetch="join" class="cn.sports.matchs.model.Item">
<column name="PARENT_ID"></column>
</many-to-one>
在Item类中
程序代码
private Item parentItem;
利用left join fetch可以完美的解决这个问题。
希望能帮你解决困难,那样我就知足了。
下面转一篇不错的文章,也是讲could not initialize proxy - no Session问题的!
Could not initialize proxy - the owning Session was closed!
很多地方都已经着名解决方案了,为了说明问题再重写一遍!
但就此说一下关于lazy机制:
延迟初始化错误是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。如果在游离状态时才初始化它,就会产生延迟初始化错误。
在<many-to-on>中这错误很常见,字面意义就是不能被初始化,因为session已经关闭了。
简单理解就是因为,你使用了lazy=true,这样hibernate在从数据库中调数据的时候是不会把关联的对象查出来的,而是保存一个获取值得方法,在你使用getXXX()调用的时候,hiberante会利用这个保存的方法去从数据库中取数据。而往往我们在jsp页面中使用getXXX()准备展示数据的时候,session早已经在dao中就关闭了,我们该如何解决这种异常呢?
简单的说有三种:
1.把lazy设成false,最2的办法,但是最简单,简单就是美嘛,也依然会有很多再使用这个方式再解决类似问题。
2.我没试过,但听说过,应该可行。
在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>
3.我用的方法,也是我认为比较不错的方法,灵活性更好。用left join fetch或inner join fetch语法。
例如:from Item i left join fetch i.parentItem ii
解释一下Item表是一个自关联的表,它的关联关系在hbm.xml中配置好了。
如下:
程序代码
<many-to-one name="parentItem" lazy="false" fetch="join" class="cn.sports.matchs.model.Item">
<column name="PARENT_ID"></column>
</many-to-one>
在Item类中
程序代码
private Item parentItem;
利用left join fetch可以完美的解决这个问题。
希望能帮你解决困难,那样我就知足了。
下面转一篇不错的文章,也是讲could not initialize proxy - no Session问题的!
Could not initialize proxy - the owning Session was closed!
很多地方都已经着名解决方案了,为了说明问题再重写一遍!
但就此说一下关于lazy机制:
延迟初始化错误是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。如果在游离状态时才初始化它,就会产生延迟初始化错误。
0 0
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- ERROR - could not initialize proxy - no Session
- could not initialize proxy - no session
- Hibernate: could not initialize proxy - no Session
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- 异常:could not initialize proxy - no Session
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- could not initialize proxy - no Session
- 错误could not initialize proxy - no Session
- C语言之const修饰符
- quick-cocos2d-x 3.3 gradle eclipse 打包
- 哲学生活中必背的哲学原理
- Android 开发常用代码片段
- 获取WebView高度的问题
- could not initialize proxy - no Session
- obj文件格式与mtl文件格式
- 编译boost遇到g++抱怨的时候
- 关于图片加载优化的小技巧
- Object-c之id ,instancetype,SEL,_cmd;self,super几种类型的区别及用法
- uitableView高度自适应
- FlyCapture2相机的连接和图像采集
- 黑马程序员——Java继承——多线程(二)
- adb出错 adb not responding 解决方法