【发布时间】: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 是外键)。
希望这是有道理的。任何帮助表示赞赏。我也愿意采用不同的方法来实现这一目标。谢谢!
【问题讨论】: