opensessioninviewfilter不起作用,请大家看一下是否哪里配置有问题?

09-08-11 netizen
opensessioninviewfilter不起作用,页面显示的时候,还是出现lazy load的错误,请大家看一下是否哪里配置有问题?
1,filter已经设置ok了. 从log中可以确认.
OpenSessionInViewFilter.doFilterInternal: Opening single Hibernate Session in OpenSessionInViewFilter
SessionFactoryUtils.doGetSession: Opening Hibernate Session
2,然后,我在从继承的DAO中调用getHibernateTemplate()执行查询时,查询没有问题,显示的log如下:
org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession: Opening Hibernate Session
[ 08-11 23:06:02 ] org.springframework.orm.hibernate3.HibernateTemplate.flushIfNecessary: Eagerly flushing Hibernate session
[ 08-11 23:06:02 ] org.springframework.orm.hibernate3.SessionFactoryUtils.closeSession: Closing Hibernate Session
应该是重新打开了一个新的session.
3,最后,可看到filter的close session日志.
[ 08-11 23:06:02 ] org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal: Closing single Hibernate Session in OpenSessionInViewFilter
[ 08-11 23:06:02 ] org.springframework.orm.hibernate3.SessionFactoryUtils.closeSession: Closing Hibernate Session
4,然后,到页面render时,就出现了lazy load的错误.
5,看了论坛以后,可能是事务的设置导致DAO中的getHibernateTemplate()的方法没有获取到filter最早页面请求时的那个session. 请大家帮忙解决一下.

我的环境: Hiberate 3.0+Spring 2.0.4;

netizen
2009-08-12 09:16
我的疑问是为什么DAO中无法获取到先前由OpensessioninviewFilter已经打开的那个session.DAO中我已经使用了callback的方法:
return (List) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException,SQLException {
Query query = s.createQuery("From Dict where id < 10");
return query.list();

请各位指点一下.

banq
2009-08-12 11:49
是有关事务的设置,可能缺少一些拦截器配置。

参考这篇文章:

http://firebody.blogbus.com/logs/316062.html

netizen
2009-08-13 00:14
谢谢banq的回复。
我看了链接,按照说明的配置了inteceptor,但还是没有解决。
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="BaseService" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref bean="BaseServiceImpl"/>
</property>
<property name="proxyInterfaces">
<value>service.BaseService</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
</list>
</property>
</bean>

banq
2009-08-13 10:48
你找Spring源码案例下在项目,对比一下,主要是事务配置。