我在渲染视图时遇到了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>
哪个应该成功。但它没有用,我得到了例外。我如何确保我的拦截器正在射击?我该如何解决这个问题?
答案 0 :(得分:15)
您使用的是@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"
答案 1 :(得分:4)
尝试使用<mvc:interceptors>
。
顺便说一句,@Transactional
是另一回事 - 它不会使你的收藏品在“视图”中运作。它只是为带注释的方法(以及它调用的方法)打开一个事务(和一个会话)
答案 2 :(得分:0)
如果您在Spring和Hibernate中使用Struts2,请尝试使用OpenSesisonInViewFilter并在web.xml中分配