Java 在HTTP请求之间休眠会话

Java 在HTTP请求之间休眠会话,java,hibernate,Java,Hibernate,我正在开发一个web应用程序,其中模型包含一个组,其中包含许多用户的列表。HTTP请求显示组。用户加载了FetchType.LAZY,因为我不想马上就把它们全部加载。组保存到HTTP会话中,并且Hibernate会话关闭。然后,应用程序通过显示组名称和描述进行响应。然后可能会出现一个新的HTTP请求来显示组中的一些用户。组从HTTP会话中提取,应用程序尝试访问列表。由于每个用户的代理都绑定到先前关闭的Hibernate会话,Hibernate不会引发异常吗?如何在HTTP会话中跨HTTP请求进行

我正在开发一个web应用程序,其中模型包含一个
,其中包含许多
用户的
列表
。HTTP请求显示
用户
加载了
FetchType.LAZY
,因为我不想马上就把它们全部加载。
保存到
HTTP会话
中,并且
Hibernate会话
关闭。然后,应用程序通过显示
名称和描述进行响应。然后可能会出现一个新的HTTP请求来显示组中的一些用户。
HTTP会话
中提取,应用程序尝试访问列表。由于每个
用户
的代理都绑定到先前关闭的
Hibernate会话
,Hibernate不会引发异常吗?如何在HTTP会话中跨HTTP请求进行延迟加载?

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


更新

除非集合大小较小或可管理,否则不要急于加载。例如,您有一个
,每个组中都有少量用户


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

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


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

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

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

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


我建议不要急于,除非您确定相关的收集量相当小(或者至少与实际有效负载相比)。我没有,我将对此进行调查。谢谢。在这种情况下,当请求已经被提供,并且列表将在HTTP调用之间展开/折叠时,视图中的Open session filter将没有帮助。在视图中打开会话过滤器通常是一个问题:)为什么它不能工作?开放会话可以通过将Hibernate会话作为HTTP会话的一部分进行维护来使用,这正是应用程序管理的当前会话模式所做的。
HTTP
会话和
Hibernate
会话是两件不同的事情。每个请求Hibernate打开会话视图过滤器(HOSIVF)将启动Hibernate会话,并在HTTP请求完成后关闭会话。作为一个原子HTTP请求的一部分,您在Hibernate会话中进行的任何DB事务都在该期间有效。在随后的HTTP请求中,Hosiff将启动一个新的Hibernate事务。若OP在第一个HTTP请求中只返回用户组,并且在
JavaScript
click事件中检索用户列表,那个么它们是两个不同的HTTP请求。因此有两个不同的Hibernate事务。