我正在开发一个Web应用程序,其中的模型由一个Group
组成,其中包含Users
的List
。 HTTP请求会显示Group
。 Users
加载了FetchType.LAZY
,因为我不想让他们马上就来。将Group
保存到HTTP session
中,并关闭Hibernate Session
。然后,应用程序通过显示Group
名称和说明进行响应。然后,新的HTTP请求可能会显示来自组的一些用户。 Group
从HTTP Session
中拉出,应用程序尝试访问该列表。 Hibernate是否会抛出异常,因为每个User
的代理都与以前关闭的Hibernate Session
绑定?如何在HTTP会话中跨HTTP请求进行延迟加载?HTTP请求之间的休眠会话
回答
你不应该把用户也不组(作为对象)的会话。最好的方案是将组ID添加到会话中,并在必要时加载组和用户。
担心表现?让Hibernate二级缓存解决这个问题。如果您正确配置对象映射,缓存应该甚至支持按组检索所有用户,例如:
<class name="Group" table="...">
<cache .../>
<bag name=users" ...>
<cache ....>
...
</bag>
</class>
我不认为你需要或应该将它存储在会话中。当你需要关联时,你可以查询它。
更新
从Eager
装载副歌,除非集合大小是小还是易于管理。例如,您有一个Groups
,每个组中有少量的用户。
如果您有反向映射,则可以使用group id
在随后的调用中查询用户列表。
您是否考虑过在视图中打开会话?
我没有,我会研究这个。谢谢。 –
当请求已经被提供并且列表将在HTTP调用之间展开/折叠时,在这种情况下,在视图中打开会话过滤器不会有帮助。在视图过滤器中打开会话通常是制作中的问题:) – ch4nd4n
为什么它不起作用?可以通过将Hibernate会话作为HTTP会话的一部分进行维护来使用开放会话,这正是应用程序管理的当前会话模式所做的。 –
- 1. 在休眠拦截器中获取http会话/请求
- 2. HTTP会话请求
- 3. 休眠会话
- 4. Http会话和休眠组合使用
- 5. 每个请求或每个用户的休眠会话数量?
- 6. Interbase DB:无法创建请求的服务:休眠会话
- 7. 休眠+ GWTP:跨多个请求的会话
- 8. [N]休眠会话
- 9. 快速后续请求后休眠会话关闭异常
- 10. 一个会话每个请求模式与Spring MVC和休眠
- 11. 会话之间没有坚持请求
- 12. 会话在请求之间丢失
- 13. Webapp2会话在请求之间丢失
- 14. 会话不请求之间使用Snaplet.Session
- 15. 写作休眠请求
- 16. Http web请求不会保留会话
- 17. Curl:请求之间的睡眠/延迟
- 18. 休眠会话工厂Android
- 19. JMS与休眠会话
- 20. 休眠会话范围
- 21. 休眠会话关闭
- 22. SEAM /休眠:一个会话
- 23. 休眠会话线程
- 24. 休眠4会话log4j
- 25. 管理休眠会话
- 26. 休眠会话处理
- 27. 休眠会话错误
- 28. EntityManager和休眠会话
- 29. Vaadin休眠会话错误
- 30. 休眠会话和标准
并获取渴望? –
我建议避免使用Eager,除非您确定相关集合相当小(或至少与实际有效负载相比)。 – ch4nd4n