1

我想使用OpenEntityManagerInViewFilter能够避免lazyinitialization加载。这是我的web.xml配置:如何配置OpenEntityManagerInViewFilter Spring MVC

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     WEB-INF/mvc-dispatcher-servlet.xml 
    </param-value> 

</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<filter> 
    <filter-name>hibernateFilter</filter-name> 
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>hibernateFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

我仍然得到exeption:

Servlet.service()对servlet的[mvc-dispatcher]与路径方面[/ ...]抛出异常

Request processing failed; nested exception is 
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ..., could not initialize proxy - no Session] with root cause 
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ...., could not initialize proxy - no Session 

有人知道我做错了什么?

回答

0

原来,因为我已经配置了我的contextConfigLocation这样的:

<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value> 
    WEB-INF/mvc-dispatcher-servlet.xml 
</param-value> 

调度的servlet不一样的ApplicationContext,并且,它被加载两次类的东西,因此该解决方案是
1 。创建一个applicationContext.xml, 2.然后将entitymanager bean从mvc dispatcher移到applicationContext.xml。 3.我的web.xml现在看起来像这样:

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<filter> 
    <filter-name>oemInViewFilter</filter-name> 
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class> 
    <init-param> 
     <param-name>entityManagerFactoryBeanName</param-name> 
     <param-value>entityManagerFactory</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>oemInViewFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping>