【发布时间】:2013-06-30 13:33:08
【问题描述】:
我需要在来自 spring 控制器的 jsp 中对惰性集合执行 forEach。但是这个调用崩溃了,因为会话在控制器中关闭了。我通过以下方式收集收集来解决这个问题:
Hibernate.initialize(obj.getCollection())
是否可以调整 mvc 以在 jsp 中进行休眠会话?
感谢
【问题讨论】:
标签: spring hibernate jsp spring-mvc
我需要在来自 spring 控制器的 jsp 中对惰性集合执行 forEach。但是这个调用崩溃了,因为会话在控制器中关闭了。我通过以下方式收集收集来解决这个问题:
Hibernate.initialize(obj.getCollection())
是否可以调整 mvc 以在 jsp 中进行休眠会话?
感谢
【问题讨论】:
标签: spring hibernate jsp spring-mvc
但是这个调用崩溃了,因为会话在控制器中关闭了
我假设崩溃是指在会话关闭后访问映射集合导致了 LazyInitializationException。
调整 mvc 以在您的 JSP 中拥有 Hibernate 会话本质上意味着您希望在 HTTP 请求期间保持会话打开。这意味着在渲染时您仍然可以加载所需的数据。
您可以使用视图模式中的打开会话来实现此目的。在 Spring 中,这是使用 OpenSessionInViewFilter 实现的。有关设置的更多详细信息,请参阅此answer。
您已经演示过的替代方法是在加载父项的事务中加载您需要的数据。这就是 Hibernate 支持延迟加载的原因。有时您需要加载子实体和集合,但有时您不需要。通过将其映射为惰性,您可以根据具体交互进行选择。
【讨论】: