有个struts + hibernate+spring的项目,一开始把 <set>删除掉了。现在想想直接用lazy=true就可避免性能 问题。于是乎,就把<set>加上,并把lazy设置为true。但问题来了。
页面想取得集合里的内容。取不了,后台报错:
原因是hibernate把session交给spring来管理。当action请求完后spring就把session给关掉了。 在jsp页面里想再去数据库里加载数据时,这个时候session已经关闭了。所以就报错了。
网上一查。
有几种解决方式
一、把fetch设置为"join",但这也会产生性能问题
二、把 lazy设置为false, 也会产生性能问题
三、使用OpenSessionInView OpenSessionInView 的意思是在view层打开重新session。
我选择了使用OpenSessionInView配置有两种方式,一种是在web.xml里。一种则是在applicationContext.xml里
我在web.xml里配置如下:
部署,运行。。。结果还是报错
把hibernateFilter的配置放到struts的配置前面。。部署,运行。OK
hibernateFilter
struts2
参考文章:http://www.cnblogs.com/mogaoyong/archive/2010/06/04/1751248.html