程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Could not initialize proxy - no Session大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Could not initialize proxy - no Session?

开发过程中遇到Could not initialize proxy - no Session的问题如何解决?下面主要结合日常开发的经验,给出你关于Could not initialize proxy - no Session的解决方法建议,希望对你解决Could not initialize proxy - no Session有所启发或帮助;

你的问题是hibernate会话仅可用于一个请求。它在请求的开始处打开,并在结束时关闭。你猜中了答案:在两个请求都完成之前,hibernate会话已关闭。

到底是怎么回事?你的实体对象在两个请求期间均有效。怎么样?它们存储在http会话中(这是另一种称为session的东西)。你没有提供有关正在使用的框架的太多信息,因此我无法为你提供更多详细信息,但是可以确定你正在使用的框架以某种方式将你的实体保留在http会话中。这样,该框架使你可以轻松地针对多个请求使用相同的对象。

当第二个请求的处理开始时,代码正在尝试访问某些由hibernate延迟初始化的实体(通常是集合的元素)。该实体未连接到hibernate会话,因此hibernate无法在读取之前初始化hibernate代理。你应该打开一个会话,然后在AJAX请求处理开始时将你的实体重新连接到该会话。

编辑:

我将尝试简要说明幕后发生的事情。所有Java Web框架都有一个或多个处理请求的servlet。Servlet通过创建一个新线程来处理每个请求(httprequest),该线程最终将产生响应(httpResponse)。处理每个请求的方法在此线程内执行。

在请求处理开始时,你的应用程序应分配其处理所需的资源(事务,hibernate会话等)。在处理周期结束时,将释放这些资源(提交事务,关闭hibernate会话,释放JDBC连接等)。这些资源的生命周期可以由你的框架管理,也可以由你的代码完成。

为了支持http等无状态协议中的应用程序状态,我们有httpSession对象。我们(或框架)将httpSession上相同客户端的不同请求周期之间仍然相关的信息放在一起。

在处理第一个请求期间,hibernate模式从数据库中懒惰地读取一个实体。由于延迟初始化,该对象结构的某些部分是hibernate代理对象。这些对象与创建它们的hibernate会话相关联。

当你尝试处理第二个请求时,框架会从httpSession对象中的上一个请求中找到实体。然后,它尝试从延迟初始化的子实体访问属性,而该子实体现在是hibernate代理对象。hibernate代理对象是对真实对象的模仿,当有人尝试访问其属性之一时,它将请求其hibernate会话用数据库中的信息填充它。这是你的hibernate代理正在尝试执行的操作。但是它的会话在之前的请求处理结束时已关闭,因此现在没有hibernate会话可用于充水(充满了真实信息)。

请注意,你可能已经在第二个请求的开头打开了一个hibernate会话,但是它不知道包含代理对象的实体,因为该实体是由另一个hibernate会话读取的。你应该将实体重新连接到新的hibernate会话。

关于如何重新附加独立实体的讨论很多,但目前最简单的方法是session.update(entity)。

希望能帮助到你。

解决方法

我有一个看起来像这样的错误:

无法初始化代理-没有会话

我正在使用java,hibernate和spring。尝试生成PDF文档时会出现此错误,我正在按照以下步骤即时生成它并存储在数据库中。

我通过POST方法向应用发送了请求。这将即时生成PDF并显示给用户。

在该请求之后,我发送了另一个请求,但是通过ajax发送了一个请求。这将生成相同的PDF,但会将其保存在数据库中。

该错误表明由于“无法初始化代理-没有会话”错误而无法执行查询。

我在做错什么,在同一用户会话中两次调用相同的方法吗?可能是在两个请求都完成之前会话已关闭吗?

希望有人可以帮助我了解正在发生的事情。

大佬总结

以上是大佬教程为你收集整理的Could not initialize proxy - no Session全部内容,希望文章能够帮你解决Could not initialize proxy - no Session所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。