有关懒加载,我也不再介绍。我相信只要用过hibernate都会对它有一定了解。在javaeye上也看到了很多类似的问题。在此我也不用重复。
如果出现类似错误,首先检查是否在web.xml中配置了如下代码:
- <filter>
- <filter-name>opensession</filter-name>
- <filter-class>
- org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
- </filter-class>
- <init-param>
- <param-name>singleSession</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>opensession</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
很多人在配置了以上代码,却问题依旧。这样就要做如下分析:
每次请求,是否已经经过了 OpenSessionInViewFilter 此过滤器。如果没有经过它,那么你的配置实际上是无效的。所以,此配置我建议配置到web.xml中的第一个过滤器中,以免干扰!我越到过很多人问我,问题最终都出在这个地方。特别是加入了strtus以后。很容易出现此类问题例如如下配置:
- <!-- Struts filter -->
- <filter>
- <filter-name>struts2Filter</filter-name>
- <filterclass>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2Filter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
StrutsPrepareAndExecuteFilter配置一定要在OpenSessionInViewFilter 之后。
原因很简单:StrutsPrepareAndExecuteFilter已经全部拦截,OpenSessionInViewFilter 将会失效!