我很难弄清楚为什么在我的应用程序中发生了什么。 使用spring和Hibernate以及struts2,我在调试过程中注意到了一些非常奇怪的东西。
我有一个用户表单,用户可以在其中编辑他的信息。提交此表单时,控制器的save()
方法应该执行一些操作并保存用户。
奇怪的是,在我在控制器中执行任何操作之前,我想查找有关谁正在执行此更改的信息。所以我根据提交表单的人的ID来从数据库中获取用户对象。但是当获取此用户对象时。然后自动提交表单中的用户... 我像这样提取用户:
User createdByUser = (User) getHibernateTemplate().find("from User u where u.username=?", username).get(0);
所以显然有些机制是自动提交我的用户。 大多数情况下,我的createdByUser与提交的用户是同一个用户。可能有hibernate检测到这个并以某种方式尝试同步db?
答案 0 :(得分:0)
可能是因为您正在对托管实体进行更改。因此,更改与数据库和数据库同步下次获取该实体时,您将获得隐式反映更改的实体。
执行搜索后,您可以清除持久性上下文以分离所有基础实体,或者可以明确地从会话中分离单个实体。
来自文档:
clear():完全清除会话。驱逐所有已加载的实例和 取消所有待处理的保存,更新和删除。不要关闭 迭代器或ScrollableResults的实例。
逐出(对象):从会话缓存中删除此实例。改变了 实例不会与数据库同步。这个操作 如果关联映射,则级联到关联实例 级联= “逐出”。