could not initialize proxy - no 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;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM