繁体   English   中英

Alt + Tab修复了Hibernate异常

[英]Hibernate Exception Fixed By Alt+Tab

我在Hibernate中遇到一个非常奇怪的问题,我想对此发表一些意见。 在我的代码中,如果执行以下操作:

  • 转到第A页
  • 单击页面A上的链接以转到页面B
  • 单击第B页上的数据项
  • 抛出异常

我收到一个错误消息:

failed to lazily initialize a collection of role: XYZ, no session or session was closed

很公平。 但是当我做同样的事情但在中间添加一个alt + tab时,一切都很好。 例如

  • 转到第A页
  • 单击页面A上的链接以转到页面B
  • 点击ALt + Tab切换到另一个应用程序
  • 点击ALt + Tab切换回Web浏览器
  • 单击第B页上的数据项
  • 一切顺利。

我对从应用程序切换焦点如何使其按我的意愿工作感到有些困惑。 有没有人能照亮这个主题? 我不认为这是一个锁定问题,即使我比第二步更快地执行了第二组步骤,仍然没有错误。

这是一个使用Hibernate 3.3.2.GA和3.4.0.GA的Seam应用程序。

您在使用JavaScript吗? 当您切换回浏览器以某种方式清除不良状态时,可能会触发事件?

它与切换应用程序无关。 也许您的浏览器在焦点丢失/获得时会更新某些内容。

您遇到问题的原因是:

  1. 在第一个请求中,您加载一个对象并将其存储在会话中。 该对象包含某种集合。

  2. 在下一个请求中,您尝试对集合进行操作,但是忘记首先调用session.refresh(object)

当第一个请求完成时,会话将自动关闭。 但是,对象中支持的集合仍包含对其的引用(以便在您首次访问它时可以自动加载它)。

您的页面是否完成了渲染? 我发现有时收到错误时,服务器不显示错误,而是简单地退出产生输出。 它将错误输出到日志,仅此而已。 我最后完成了一半的页面。 查看源代码,看看是否走到了尽头,也许是切换导致服务器变得懒惰,或者浏览器在发生错误时过早终止了连接

我的建议是进行单元测试,以查看是否可以在与浏览器隔离的其他环境中重现错误;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM