`
Aga
  • 浏览: 214168 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

hibernate中lazy加载所引发的问题

阅读更多
可能原因:
当<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">

转自:http://www.iteye.com/topic/164219
分享到:
评论
2 楼 Aga 2008-09-16  
lazy属性的默认值就是true,另外load()和get()之间的区别在于:get()会立即加载,load会延迟(对于hibernate3的情况而言)。
1 楼 Aga 2008-03-09  
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>*.html</url-partter>
</filter-mapping> 
...

通过该方法,就可以把session绑定到线成上,这样在service层调用完毕session之后就不会直接关闭session,以保证在jsp页面中也可以调用。

相关推荐

Global site tag (gtag.js) - Google Analytics