Hibernate在事务插入后检索OLD数据

时间:2011-03-11 19:07:09

标签: java hibernate

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

我有一个交易,我在其中将新记录插入两个表:用户和注册。

注册包含UserId(意味着用户可能有许多注册)。

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

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

  • User.getName()
  • User.getEmail()
  • User.getBlah()
  • User.getReigstrations()。iterator.next()

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

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

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

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

1 个答案:

答案 0 :(得分:1)

很难诊断出确切的问题,因为您没有说明何时关闭会话,以及您获得用户的会话/交易。但我想这个问题来自于在插入新注册时你不保持关系的两个方面。

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