问题描述
我用了OpenSessionInViewInterceptor报错org.hibernate.HibernateException:collectionisnotassociatedwithanysession,然后又用OpenSessionInViewFilter还是报同样错误,请求终极解决方案,高手帮帮忙!
解决方案
解决方案二:
spring里的hibernateDaoSupport里采用了回调方式,每个数据库方法都置于一个session中,方法结束了,session也就关闭了,如果采用延迟加载,在方法之外在读collection,就会报异常。建议用spring重新配置事务管理,将session与具体的事务相关联。
解决方案三:
请问楼上的可不可以给个具体点的例子啊?
解决方案四:
能把继承这个父类(OpenSessionInViewFilter)的类给我们看?
解决方案五:
如果那个里面的类没错那就写个filter类在到filter类里的dofilter()方法里判断session
解决方案六:
关于session我也很想了解..老是报sessionwascloseed!spring重新配置事务管理,将session与具体的事务相关联怎么配.!
解决方案七:
LZ,spring在每一次完成之后都会关闭相应的Session,如果你使用的是延迟加载,那么就需要注意Session关闭的时间,因此,如果一定要使用到延迟加载的话,那么只有在Session关闭之前将所需要的数据load进来,即,在同一个事务下或者在相同的session不同的事务下。Spring具体事务的开启与关闭是通过spring的事务拦截器来实现的,具体的开启时间和关闭时间,是当执行到这个方法和退出这个方法的时候,你可以参考一下spring的官方文档。
解决方案八:
这个问题确实难搞,设置为fetch="select"lazy="false"倒是可以解决,但是项目数据一多就影响速度!!
解决方案九:
importorg.hibernate.FlushMode;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.springframework.orm.hibernate3.SessionFactoryUtils;publicclassOpenSessionInViewFilterextendsorg.springframework.orm.hibernate3.support.OpenSessionInViewFilter{/***wedoadifferentflushmodethaninthecodebase*here*/protectedSessiongetSession(org.hibernate.SessionFactorysessionFactory)throwsorg.springframework.dao.DataAccessResourceFailureException{Sessionsession=SessionFactoryUtils.getSession(sessionFactory,true);session.setFlushMode(FlushMode.COMMIT);returnsession;}/***wedoanexplicitflushherejustincase*wedonothaveanautomatedflush*/protectedvoidcloseSession(Sessionsession,SessionFactoryfactory){session.flush();super.closeSession(session,factory);}}
用这个类替换你的OpenSessionInView,在web.xml中,如果用到了struts2,记得把OpenSessionInViewFilter的映射放到FilterDispatcher的前面