java - 如何配置 OpenEntityManagerInViewFilter Spring MVC

标签 java hibernate spring-mvc lazy-initialization hibernate-entitymanager

我想使用OpenEntityManagerInViewFilter来避免延迟初始化加载。这是我的 web.xml 配置:

<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>

我仍然收到异常(exception):

Servlet.service() for 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

有人知道我做错了什么吗?

最佳答案

结果是因为我像这样配置了 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调度程序移动到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>

关于java - 如何配置 OpenEntityManagerInViewFilter Spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32988394/

相关文章:

java - 您尝试访问的页面(/manager/projects)不存在-tomcat7下的intellij 13.1

java - 如何在按下左键时检测鼠标移动?

java - 在 Java 6 上显示最大字符串和字符数组内容的命令。如何实现?

java - 如何在不是来自 JNDI 的 JPA EntityMangerFactory 上设置数据源

javascript - Spring MVC : CSS & JS not getting applied to Jsp page

spring-mvc - 从 View 中省略 ModelAttribute

java - 如何在 Eclipse 中从 Java 调用 Frege?

java - 如何在JPanel上播放mp4视频?

java - 具有接口(interface)属性的 JPA 实体,这可能吗?

java - Spring MVC 中未显示绑定(bind)数据