首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用jpa/hibernate的Spring中,如何保持会话打开以避免延迟初始化异常?

在使用jpa/hibernate的Spring中,如何保持会话打开以避免延迟初始化异常?
EN

Stack Overflow用户
提问于 2009-07-16 20:09:44
回答 5查看 24.7K关注 0票数 21

目前,我将实体bean中的集合标记为急于避免在使用EntityManager加载bean后尝试访问集合属性时出现延迟初始化异常。

如果我将集合保留为延迟加载,如何保持会话打开?我想过尝试@ transaction,但即使这样做有效,我也不想这么做,因为在一个长方法上打开一个事务似乎是不对的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-16 20:27:02

https://www.hibernate.org/43.html

基本上,您有几个选择。

-You可以使用“在视图中打开会话”模式,在这种模式中,您可以使用过滤器/拦截器/面向方面编程风格的逻辑在服务器端逻辑开始时打开会话,并在会话结束时关闭会话。

-You可以实现跨越多个请求-响应周期的会话。

简单的老式Servlet过滤器是最简单的。

票数 9
EN

Stack Overflow用户

发布于 2009-07-24 15:06:34

最后一个选项似乎被忽略了,那就是你可以通过使用连接来基于你的用例来构建你的对象图。

这将导致对象被初始化,即不是代理。

如果您控制了客户端(即,您没有创建开放服务发布api),则可以使用此方法,因为您需要知道当会话由于事务已关闭而关闭时所触及的状态。

票数 5
EN

Stack Overflow用户

发布于 2009-07-17 08:14:22

正如其他人所说,您应该阅读“在视图中打开会话”模式,其基本思想是在处理http请求的整个持续时间内打开一个hibernate会话。有hibernate specificspring两种解决方案--我以前用过spring,它工作得很好。

在问题中,您提到您不希望长时间打开事务。对于大多数人来说,这不是问题,因为每个请求都会得到相对较快的处理。但是,如果在您的情况下确实不可能,则此模式将不适用于您。你能详细解释一下为什么你不想让交易保持开放吗?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1139985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档