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