hibernate3中出现 could not initialize proxy - no Session 错误的解决办法以及lazy load的介绍 could not initialize proxy - no Session
异常:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
原因:hibernate3 many-to-one的默认选项是 lazy = "proxy"
在<many-to-on>中这错误很常见,字面意义就是不能被初始化,因为session已经关闭了。
简单理解就是因为,你使用了lazy=true,这样hibernate在从数据库中调数据的时候是不会把关联的对象查出来的,而是保存一个获取值得方法,在你使用getXXX()调用的时候,hiberante会利用这个保存的方法去从数据库中取数据。而往往我们在jsp页面中使用getXXX()准备展示数据的时候,session早已经在dao中就关闭了,我们该如何解决这种异常呢?
解决方法:<many-to-one> 和 <set> 中设置 lazy="false"
hbm.xml配置如下:
<class table="T_Orgnization" name="com.scriptguy.oa.model.Orgnization" >
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="sn"/>
<property name="description"/>
<many-to-one lazy="false" column="pid" name="parent"/>
<set lazy="false" inverse="true" name="children">
<key column="pid"/>
<one-to-many class="com.scriptguy.oa.model.Orgnization"/>
</set>
</class>