草庐IT

java - 无法初始化代理 - 没有 session

coder 2023-05-11 原文

我遇到如下错误:

Could not initialize proxy - no Session

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

  1. 我通过 POST 方法向应用程序发送了一个请求。这会即时生成 PDF 并向用户显示。

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

错误表明由于“无法初始化代理 - 无 session ”错误而无法执行查询。

我做错了什么,从同一个用户 session 中调用了两次相同的方法吗?会不会是 session 在两个请求完成之前就关闭了?

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

最佳答案

您的问题是 hibernate session 仅适用于一个请求。它在请求开始时打开并在结束时关闭。您猜对了:Hibernate session 在两个请求完成之前就关闭了。

到底发生了什么?您的实体对象在两个请求期间都存在。如何?它们存储在 HTTP session 中(这是一个不同的东西,称为 session )你没有提供关于你正在使用的框架的太多信息,所以我不能给你更多的细节,但可以肯定的是你正在使用的框架以某种方式将您的实体保留在 HTTP session 中。这就是框架使您可以轻松地为多个请求使用相同对象的方式。

当第二个请求的处理开始时,代码试图访问一些由 hibernate 延迟初始化的实体(通常是集合的元素)。该实体未附加到 hibernate session ,因此 hibernate 无法在读取 hibernate 代理之前对其进行初始化。您应该在 ajax 请求处理开始时打开一个 session 并将您的实体重新附加到它。

编辑:

我将尝试简要解释幕后发生的事情。所有 java web 框架都有一个或多个处理请求的 servlet。 servlet 通过创建一个最终将产生响应 (HttpResponse) 的新线程来处理每个请求 (HttpRequest)。处理每个请求的方法都在这个线程内部执行。

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

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

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

当您尝试处理第二个请求时,框架会在 HttpSession 对象中从上一个请求中找到实体。然后它试图从一个被延迟初始化的子实体访问一个属性,现在它是一个 hibernate 代理对象。 hibernate 代理对象是对真实对象的模仿,当有人试图访问其属性之一时,它将要求其 hibernate session 用数据库中的信息填充它。这就是您的 hibernate 代理正在尝试做的事情。但是它的 session 在之前的请求处理结束时关闭了,所以现在它没有一个 hibernate session 可以用来补充水分(充满真实信息)。

请注意,您可能已经在第二个请求开始时打开了 hibernate session ,但它不知道包含代理对象的实体,因为该实体已被不同的 hibernate session 读取。您应该将实体重新附加到新的 hibernate session 。

关于如何重新连接分离的实体有很多讨论,但目前最简单的方法是 session.update(entity)

希望对你有帮助。

关于java - 无法初始化代理 - 没有 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16752799/

有关java - 无法初始化代理 - 没有 session的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 未初始化的常量 Psych::Syck (NameError) - 2

    在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到ruby​​gems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决

  3. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  4. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  7. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  8. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  9. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  10. ruby-on-rails - 未在 Ruby 中初始化的对象 - 2

    我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调

随机推荐