小编典典

Spring OpenSessionInViewInterceptor不起作用

hibernate

呈现视图时,我遇到了hibernate和延迟加载的(著名的)问题....很多人说,仅有的两种解决方案是:

  • 使方法具有事务性(这并不总是可取的)
  • 使用OpenSessionInViewInterceptor。

后者是可取的IMO。无论如何,我不确定此拦截器是否正在触发(实际上,我得到了相同的延迟加载异常,并且没有任何变化):

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: it.jsoftware.jacciseweb.beans.Listino.prodotti, no session or session was closed

我使用的是基于简单注释的URL映射,因此请阅读Spring 3的文档,然后在servlet-context.xml中使用它:

<bean id="handlerMapping"
        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <!-- <property name="order" value="2" /> -->
        <property name="interceptors">
            <list>
                <ref bean="openSessionInViewInterceptorInst" />
            </list>
        </property>
    </bean>

哪个应该能解决问题。但是它不起作用,我得到了例外。如何确保拦截器正在发射?我该如何解决?


阅读 292

收藏
2020-06-20

共1个答案

小编典典

您在使用@RequestMapping注释吗?如果我没记错的话,将拦截器放在url bean上存在问题。在Spring 3.0中,您可以这样定义拦截器:

<mvc:interceptors>
    <bean class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
        <property name="sessionFactory">
            <ref local="sessionFactory" />
        </property>
    </bean>
</mvc:interceptors>

假设sessionFactory是对SessionFactory bean的引用。

您还需要包括mvc命名空间。

xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
2020-06-20