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;

    

1
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源码案例下在项目,对比一下,主要是事务配置。

猜你喜欢