由Alt + Tab修复的Hibernate异常

时间:2009-08-21 15:23:46

标签: java hibernate

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

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

我收到错误告诉我:

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

足够公平。但是当我做同样的事情但在中间添加一个alt +标签时,一切都很好。 E.g。

  • 转到第A页
  • 单击第A页上的链接进入第B页
  • 点击ALt + Tab切换到另一个应用程序
  • 点击ALt + Tab切换回网络浏览器
  • 点击第B页上的数据项
  • 一切都很好。

关于如何从我的应用程序切换焦点使其按照我的意愿行事,我有点困惑。有没有人有光照在这个问题上?我不认为这是一个锁定问题,因为即使我比第一组更快地执行第二组步骤,仍然没有错误。

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

4 个答案:

答案 0 :(得分:0)

你正在使用javascript吗?当你切换回浏览器以某种方式清除坏状态时,可能会触发一个事件?

答案 1 :(得分:0)

这与切换应用程序无关;也许你的浏览器会在焦点丢失/获得期间更新某些内容。

您遇到问题的原因是:

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

  2. 在下一个请求中,您尝试对集合执行某些操作,但忘记先拨打session.refresh(object)

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

答案 2 :(得分:0)

您的网页是否完成了渲染?我发现有时当我收到错误而不是显示错误时,服务器只是退出生成输出。它将错误输出到日志,但这就是它。我最终得到了一半完成的页面。查看源代码并查看是否到达正文的末尾,可能是您的切换导致服务器变得懒惰,或者您的浏览器在发生错误时提前终止连接

答案 3 :(得分:0)

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