可能原因:
当<class>元素或者<set>元素的lazy属性为true时,load() or get() or find()加载这些对象时,Hibernate不会马上产生任何select语句,只是产生一个Obj代理类实例,只有在session没有关闭的情况下运行Obj.getXxx()时才会执行select语句从数据库加载对象,如果没有运行任何Obj.getXxx()方法,而session已经关闭,Obj已成游离状态,此时再运行Obj.getXxx()方法,Hibernate就会抛出"Could not initialize proxy - the owning Session was closeed"的异常,是说Obj代理类实例无法被初始化。然而想在Session关闭之前不调用Obj.getXxx()方法而关闭Session之后又要用,此时只要在Session关闭之前调用Hibernate.initialize(Obj)或者Hibernate.initialize(Obj.getXxx())即可,net.sf.hibernate.Hibernate类的initialize()静态方法用于在Session范围内显示初始化代理类实例。
解决方法:
所以,在映射文件中,将lazy属性设为false即可,<class name="cssduty.table.Team" table="team" catalog="duty" lazy="false">
当<class>元素或者<set>元素的lazy属性为true时,load() or get() or find()加载这些对象时,Hibernate不会马上产生任何select语句,只是产生一个Obj代理类实例,只有在session没有关闭的情况下运行Obj.getXxx()时才会执行select语句从数据库加载对象,如果没有运行任何Obj.getXxx()方法,而session已经关闭,Obj已成游离状态,此时再运行Obj.getXxx()方法,Hibernate就会抛出"Could not initialize proxy - the owning Session was closeed"的异常,是说Obj代理类实例无法被初始化。然而想在Session关闭之前不调用Obj.getXxx()方法而关闭Session之后又要用,此时只要在Session关闭之前调用Hibernate.initialize(Obj)或者Hibernate.initialize(Obj.getXxx())即可,net.sf.hibernate.Hibernate类的initialize()静态方法用于在Session范围内显示初始化代理类实例。
解决方法:
所以,在映射文件中,将lazy属性设为false即可,<class name="cssduty.table.Team" table="team" catalog="duty" lazy="false">
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 1744 次
- 性别:

- 来自: 大连

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
MyEclipse的UML设计支持
这样的教程不明了,最好用视频.我觉得myeclipse uml还是比较简单的,只 ...
-- by pdw2009 -
java正则表达式
是好贴,不过里面的错误有点多啊。
-- by yoyokaka -
linux AS4+apache+tomcat ...
mod_proxy_ajp 才是正解,不要走弯路了!
-- by crofton -
linux AS4+apache+tomcat ...
http://tomcat.apache.org/connectors-doc/ ...
-- by pupi -
linux AS4+apache+tomcat ...
mod_jk已经被淘汰了,改用mod_proxy_ajp吧。
-- by robbin






评论排行榜