我有JSF 2.1应用程序uisng Spring和Hibernate。
为了解决LazyLoading问题我正在使用OpenSessionInView过滤器。
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
一切正常,我的懒惰类被启动,但是当我使用带有重定向的导航规则
时 <navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>fail</from-outcome>
<to-view-id>/index.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
我收到org.hibernate.LazyInitializationException:
id我删除<redirect />
标记一切正常。
为什么呢?是因为新的View已被创建了吗?那我为什么要有新的Hibernate Session呢? 有什么工作吗?
答案 0 :(得分:2)
<redirect />
,从而完成当前请求并关闭当前(Hibernate)会话。
浏览器会向提供的网址提交新请求,从而生成尚未初始化的实体未绑定的全新(Hibernate)会话。
您需要在重定向之前手动触发现有请求中的初始化(如果可能),或者在重定向后再次重新获取所有必需的实体。