Java Hibernate在事务插入后检索旧数据

Java Hibernate在事务插入后检索旧数据,java,hibernate,Java,Hibernate,我正在使用SpringMVC3.05中的Hibernate和Oracle数据库 我有一个事务,在其中我将一条新记录插入两个表:User和Registration 注册包含一个用户ID(意味着一个用户可能有许多注册) 当我提交事务时,我可以查询我的数据库并查看新行是否已成功插入 问题 在事务成功提交之后,我将用户重定向到确认页面,在那里我想显示一些关于刚刚插入的注册的信息。在确认页面上,我通过userId执行Hibernate查询,以获取刚刚插入的用户。然后,我使用以下属性填充模型: User.

我正在使用SpringMVC3.05中的Hibernate和Oracle数据库

我有一个事务,在其中我将一条新记录插入两个表:User和Registration

注册包含一个用户ID(意味着一个用户可能有许多注册)

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

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

  • User.getName()
  • User.getEmail()
  • User.getBlah()
  • User.getReigstrations().iterator.next()
粗体显示的异常会引发异常“NoTouchElementException”,因为集合中没有项目。集合中应该有一个注册。如果我关闭浏览器,启动一个新的浏览器,并将自己引导回引发异常的同一个链接,它就会工作!集合中有一个注册

我的猜测是,当我查询我的用户时,它不是重新加载相关的表对象,而是从缓存中提取,或者假设用户保存后没有添加任何内容。有人知道强制Hibernate重新加载此数据的方法吗

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


希望这是有意义的。感谢您的帮助。我也愿意用不同的方法来实现这一点。谢谢

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


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

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

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