我正在使用注释在Hibernate,Spring和JSF2中构建应用程序。我如何利用Spring中的OpenSessionInViewInterceptor来捕获可能在bean中打开的任何hibernate会话?
我正在尝试优雅地解决常见的“未能懒散地初始化角色集合:your.Class.assocation没有会话或会话已关闭。”尝试从另一个POJO中的未初始化的POJO列表中读取时出现问题(A标签)由DAO检索的实体,其中包含我想要阅读的Project对象列表。我发现了这个:
http://www.paulcodding.com/blog/2008/01/21/using-the-opensessioninviewinterceptor-for-spring-hibernate3/
但未能在我的环境中使用它。
请提供详细的答案,因为互联网上充满了模糊,无益的教程。考虑到提供了逐步指导,我也会很乐意寻找替代解决方案。
答案 0 :(得分:3)
事实证明它非常简单,比拦截器,AOP和可以在互联网上找到的无数怪异要简单得多。 将此片段(请注意我在第二个init-param中的小评论)插入到您的web.xml中,以忘记所有困境。
<!-- Hibernate OpenSession Filter -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>***WhateverTheNameOfYourSessionFactoryBeanIs***</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>