HTTP请求之间的休眠会话

时间:2012-11-28 15:42:11

标签: java hibernate

我正在开发一个Web应用程序,其中模型包含Group,其中包含许多List Users。 HTTP请求将显示GroupUsers已加载FetchType.LAZY,因为我不想立即使用它们。 Group已保存到HTTP sessionHibernate Session已关闭。然后,应用程序通过显示Group名称和描述进行响应。然后可能会出现一个新的HTTP请求,以显示该组中的某些用户。从Group中提取HTTP Session,应用程序尝试访问该列表。 Hibernate不会抛出异常,因为每个User的代理都绑定到之前关闭的Hibernate Session吗?如何在HTTP会话中跨HTTP请求进行延迟加载?

3 个答案:

答案 0 :(得分:1)

我认为您不需要或应该将其存储在会话中。当您需要关联时,您可以查询它。


<强>更新

不要加载Eager,除非收集尺寸小或可管理。例如,您有一个Groups,每组中的用户数量很少。

如果您有反向映射,则可以使用group id在后​​续调用中查询用户列表。

答案 1 :(得分:1)

您不应将用户或组(作为对象)放在会话中。最好的方案是将group id放入会话中,并在必要时加载组和用户。

担心表现?让Hibernate二级缓存解决这个问题。如果正确配置对象映射,缓存甚至应该支持按组检索所有用户,例如:

<class name="Group" table="...">
   <cache .../>

   <bag name=users" ...>
     <cache ....>
     ...
   </bag>
</class>

答案 2 :(得分:0)

您是否考虑过在视图中打开会话?

Open Session In View