我在Spring MVC 3.05和Oracle数据库中使用Hibernate。
我有一个交易,我在其中将新记录插入两个表:用户和注册。
注册包含UserId(意味着用户可能有许多注册)。
当我提交事务时,我可以查询我的数据库并看到新行已成功插入。
问题 在事务提交成功后,我将用户重定向到确认页面,我想在其中显示有关刚刚插入的注册的一些信息。在确认页面上,我通过userId执行Hibernate查询以获取刚刚插入的用户。然后我使用以下属性来填充我的模型:
以粗体显示的那个引发异常“NoSuchElementException”,因为集合中没有项目。集合中应该有一个注册。如果我关闭浏览器,启动一个新的浏览器,并将自己引回到抛出异常的同一链接,IT工作!集合中有注册。
我的猜测是,当我查询我的用户时,它没有重新加载相关的表对象,而是从缓存中提取或者假设自用户保存以来没有添加任何其他内容。有谁知道强制Hibernate重新加载这些数据的方法?
不幸的是,我不能只通过UserId获取注册,因为它将UserId映射到整个User对象(通过对象生成,因为User是外键)。
希望这是有道理的。任何帮助表示赞赏。我也愿意采用不同的方法来实现这一目标。谢谢!
答案 0 :(得分:1)
很难诊断出确切的问题,因为您没有说明何时关闭会话,以及您获得用户的会话/交易。但我想这个问题来自于在插入新注册时你不保持关系的两个方面。
您应该在注册中设置用户,并将注册添加到用户的注册列表中。