呈现视图时,我遇到了hibernate和延迟加载的(著名的)问题....很多人说,仅有的两种解决方案是:
后者是可取的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>
哪个应该能解决问题。但是它不起作用,我得到了例外。如何确保拦截器正在发射?我该如何解决?
您在使用@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"