【问题标题】:Hibernate retrieves OLD data after transaction insertHibernate 在事务插入后检索 OLD 数据
【发布时间】:2011-07-13 17:31:51
【问题描述】:

我在 Spring MVC 3.05 和 Oracle 数据库中使用 Hibernate。

我有一个事务,我在两个表中插入一条新记录:用户和注册。

Registration 包含一个 UserId(意味着一个用户可能有很多次注册)。

当我提交事务时,我可以查询我的数据库并看到新行已成功插入。

问题 事务提交成功后,我将用户重定向到确认页面,我想在其中显示有关刚刚插入的注册的一些信息。在确认页面上,我通过 userId 执行 Hibernate 查询以获取刚刚插入的用户。然后我使用以下属性来填充我的模型:

  • 用户.getName()
  • User.getEmail()
  • User.getBlah()
  • User.getReigstrations().iterator.next()

粗体项抛出异常“NoSuchElementException”,因为集合中没有项目。集合中应该有一个注册。如果我关闭浏览器,启动一个新浏览器,然后将自己引导回引发异常的同一个链接,它可以工作!集合中有一个注册。

我的猜测是,当我查询我的用户时,它不会重新加载相关的表对象,而是从缓存中提取或假设自保存用户以来没有添加任何其他内容。有谁知道强制休眠重新加载这些数据的方法?

不幸的是,我不能只通过 UserId 获得注册,因为它将 UserId 映射到整个 User 对象(通过对象生成,因为 User 是外键)。

希望这是有道理的。任何帮助表示赞赏。我也愿意采用不同的方法来实现这一目标。谢谢!

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    很难诊断出确切的问题,因为您没有说明何时关闭会话,以及您在哪个会话/事务中获得了您的用户。但是我想问题出在插入新注册时您没有保持关系的两侧。

    您应该在注册中设置用户,并将注册添加到用户的注册列表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多