如何在春季从jsp-foreach访问懒惰的hibernate集合



我需要从spring控制器在jsp中进行forEach over lazy集合。但由于会话在控制器中关闭,所以此调用崩溃。我通过以下方式收集来解决此问题:Hibernate.initialize(obj.getCollection())是否可以将mvc调整为在jsp中具有hibernate会话?

Thanx

但由于会话在控制器中关闭,因此此调用崩溃

我认为崩溃是指您在会话关闭后访问映射的集合,从而导致LazyInitializationException。

将mvc调整为在JSP中包含Hibernate会话本质上意味着您希望在HTTP请求期间保持会话打开。这意味着在渲染时仍然可以加载所需的数据。

您可以使用视图中的打开会话模式来实现这一点。在Spring中,这是使用OpenSessionInViewFilter实现的。有关设置的更多详细信息,请参阅此答案。

您已经演示过的另一种方法是在加载父级的事务中加载所需的数据。这就是为什么Hibernate支持延迟加载。有时您需要加载子实体和集合,但有时不需要。通过将其映射为惰性,您可以根据具体的交互进行选择。

最新更新