the owning Session was closed
could not initialize proxy - the owning Session was closed
开发环境:
Struts 2 + Spring 2.0 + Hibernate 3.2
异常如下:
2009-3-21 17:59:05 org.hibernate.LazyInitializationException <init>
严重: could not initialize proxy - the owning Session was closed
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closedat org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:60)at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:172)at com.kindion.blog.ArticleType$$EnhancerByCGLIB$$40d67a28.toString(<generated>)at java.lang.String.valueOf(Unknown Source)at java.io.PrintStream.print(Unknown Source)at java.io.PrintStream.println(Unknown Source)at com.kindion.service.impl.ArticleServiceImplTest.testQueryAll(ArticleServiceImplTest.java:35)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at junit.framework.TestCase.runTest(TestCase.java:154)at junit.framework.TestCase.runBare(TestCase.java:127)at junit.framework.TestResult$1.protect(TestResult.java:106)at junit.framework.TestResult.runProtected(TestResult.java:124)at junit.framework.TestResult.run(TestResult.java:109)at junit.framework.TestCase.run(TestCase.java:118)at junit.framework.TestSuite.runTest(TestSuite.java:208)at junit.framework.TestSuite.run(TestSuite.java:203)at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
分析原因:
Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个Session 范围之内进行。如果Service 层返回一个启用了延迟加载功能的领域对象给Web层,当Web层访问到那些需要延迟加载的数据时,由于加载领域对象的Session已经关闭,这些导致了延迟加载数据的访问异常!
Spring 为此提供了一个OpenSessionInViewFilter过滤器,它的主要功能是使每个请求过程绑定一个Session,即使最初的事务已经完成了,也可以在Web层进行延迟加载的操作。
解决方法:(经过查询相关资料,虽然找到这个解决办法,但是我的问题还是没有解决,在此帖出来,希望有人用得着)
在web.xml中配置filter来解决。
< 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 > *.action </ url-pattern > </ filter-mapping >
==================================================================
我的问题解决了,我的问题出现在 web.xml 配置文件下 多个Filter 顺序 的问题
如果你有用到其他的过滤器(Filter),你就把OpenSessionInViewFilter这个过滤器放到你其他过滤器的前面。
<!--============SrpingOpenSessionInViewFilter============= -->
<!--把它放在其他Filter的前面--><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>/*</url-pattern></filter-mapping>
<!-- ============Sturts 2 Filter============= --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>
the owning Session was closed相关推荐
- the vm session was closed before any attempt to power it on
今天启动VBOX出现这个问题"the vm session was closed before any attempt to power it on" 1.找到一个解决方法:到存储 ...
- Hibernate中发生Session is closed 的另一种可能!
Hibernate中发生"Session is closed" 的另一种可能! 文章分类:Java编程 关键字: hibernate session is closed Hiber ...
- Hibernate中发生Session is closed 的另一种可能
Hibernate中发生"Session is closed" 的另一种可能:没有commit的Transaction. 关键字:"Session is closed&q ...
- hibernate 延迟加载问题探讨
延迟初始化错误是运用Hibernate开发项目时最常见的错误.如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它.如果在 ...
- object references an unsaved transient instance - save the transient instance before flushing .
http://blog.csdn.net/zdwzzu2006/article/details/7552234 异常1:not-null property references a null or t ...
- Hibernate常见错误
Hibernate常见错误 1.错误:object references an unsaved transient instance - save the transient instance bef ...
- hibernate 报错大全
日志 使用JDK的自定义Comparator对Cllections进行排序 oracle数据库拼音排序及NLS_SORT配置 Hibernate常见错误合集 2012-05-23 19:04:0 ...
- IT忍者神龟之hibernate 延迟加载问题探讨
关于 lazy 机制: 延迟初始化错误是运用 Hibernate 开发项目时最常见的错误.如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于S ...
- open session and Hibernate事务处理机制
相关文章: Hibernate入门 - Transaction 使用OpenSessionInView模式时的一个异常问题解决方法 推荐圈子: 青岛javaeye 更多相关推荐 在没有使用Spring ...
- 【kafka】Kafka Fetch Session 剖析
1.概述 转载:https://www.cnblogs.com/smartloli/p/14352489.html 1.概述 最近有同学留言在使用Kafka的过程中遇到一些问题,比如在拉取的Topic ...
最新文章
- 知乎宣布完成4.34亿美元F轮融资,快手领投,融资额刷新此前记录
- 个人副业在家可做大学生首选小程序创业项目
- OpenCASCADE:Modeling Data之3D几何
- Scrapy爬虫基本使用
- 系统开发基础:UML中图的相关知识笔记(下)
- Azure SQL的DTU和eDTU到底是个什么鬼
- 在EditPlus中配置PHP调试
- Linux下squid代理缓存服务环境部署
- 思科被发现使用华为代码,解释:忘了删
- atitit.React 优缺点 相比angular react是最靠谱的web ui组件化方案了
- 联想IBM服务器装系统教程,联想thinkpad系统安装攻略 每一个步骤都有
- 【OpenCV实战】简洁易懂的车牌号识别Python+OpenCV实现“超详解”(含代码)
- python itchat教程_Python itchat.run方法代码示例
- 时钟屏保fliqlo
- 【MySQL】不建议使用分区表
- RAW数据格式的图片转换--常用于相机开发和图片旋转
- 软件工程导论第九到十二章章节复习总结附思维导图
- 【数据结构】---堆排序+TOP-K问题(了解游戏排行底层原理)
- java xtend_Java加上Xtend,满足你对C#语法的所有想象
- 动手制作智能化家居“魔镜”