Hibernate缓存和自动提交说明

Hibernate缓存和自动提交说明,hibernate,Hibernate,我很难弄明白为什么我的应用程序中发生了一些事情。 使用spring、Hibernate和struts2,我在调试过程中注意到了一些非常奇怪的东西 我有一个用户表单,用户可以在其中编辑他的信息。提交此表单时,控制器的save()方法应该执行一些操作并保存用户 奇怪的是,在我在控制器中做任何事情之前,我想找到关于谁在做这个更改的信息。因此,我根据提交表单的人的Id从数据库中获取一个用户对象。但当获取此用户对象时。然后表单中的用户自动提交。。。 我正在按如下方式获取用户: User createdBy

我很难弄明白为什么我的应用程序中发生了一些事情。 使用spring、Hibernate和struts2,我在调试过程中注意到了一些非常奇怪的东西

我有一个用户表单,用户可以在其中编辑他的信息。提交此表单时,控制器的
save()
方法应该执行一些操作并保存用户

奇怪的是,在我在控制器中做任何事情之前,我想找到关于谁在做这个更改的信息。因此,我根据提交表单的人的Id从数据库中获取一个用户对象。但当获取此用户对象时。然后表单中的用户自动提交。。。 我正在按如下方式获取用户:

User createdByUser = (User) getHibernateTemplate().find("from User u where u.username=?", username).get(0);
很明显,某种机制正在自动提交我的用户。
大多数情况下,我的createdByUser与提交的用户是同一个用户。有没有可能是hibernate检测到这一点并试图以某种方式同步数据库?

可能是因为您正在对托管实体进行更改。因此,更改与数据库同步&下次获取该实体时,您将获得隐式反映更改的实体

执行搜索后,可以清除持久性上下文以分离所有底层实体,也可以从会话显式分离单个实体

从文件:

清除():完全清除会话。逐出所有加载的实例和 取消所有挂起的保存、更新和删除。请勿关闭或打开 可滚动结果的迭代器或实例

退出(对象):从会话缓存中删除此实例。对 实例将不会与数据库同步。这次手术 如果关联映射为,则级联到关联实例 cascade=“逐出”