打印本文 打印本文 关闭窗口 关闭窗口
Tips of hibernate +weblogic 8.1 + oracle 9.2 / db2 8.1
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2325  更新时间:2009/4/22 22:03:01  文章录入:mintao  责任编辑:mintao
User中,有多个属性:namepasswordphone等,还有一个List类型的posts。当我们对posts使用lazy laoding的时候,hibernate会在获得User对象的时候,仅仅返回name,password,phone等基本属性,当你访问posts的时候,它才会从数据库中提取posts需要的数据,这就是所谓lazy laoding。但是在我们的系统中,session是被立即关闭的,也就是在读取了name,password,phone等基本属性后,session已经close了,再进行lazy loaiding就会有异常。

 

解决办法是在close session之前,调用Hibernate.initialize(user.getPosts()),告诉系统,user.getPosts()是需要lazy laoding的。但是这样做会破坏HibernateSession类的封装,郁闷。

 

后来采用所谓的OpenSessionInView模式,把session的周期交给servlet filter来管理,每当有request进来,就打开一个sessionresponse结束之后再关闭它,这样可以让session存在于整个请求周期中。但是在实际操作过程中,发现一下问题:

 

Lazy laoding应该是两条select构成的,但是在使用了OpenSessionInView模式后,系统执行了一条selectsession就被关闭了。相同的代码,放到普通环境中,就执行正常,目前这个问题已经在java eye挂了很久,无人解答。望高人指点。

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口