0

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

我有一个用户表单,用户可以在其中编辑他的信息。当这个表单被提交时,控制器的save()方法应该做一些事情并保存用户。

奇怪的是,在我在控制器中做任何事情之前,我想找到关于谁在做这个改变的信息。因此,我根据提交表单的人的 ID 从数据库中获取用户对象。但是当这个用户对象被获取时。然后自动提交表单中的用户......我像这样获取用户:

User createdByUser = (User) getHibernateTemplate().find("from User u where u.username=?", username).get(0);

因此,显然某些机制正在自动提交我的用户。大多数时候,我的 createdByUser 与提交的用户是同一个用户。有没有可能是休眠检测到这一点并以某种方式尝试同步数据库?

4

1 回答 1

0

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

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

从文档:

clear() :完全清除会话。驱逐所有加载的实例并取消所有挂起的保存、更新和删除。不要关闭打开的迭代器或 ScrollableResults 的实例。

evict(object) :从会话缓存中删除此实例。对实例的更改不会与数据库同步。如果关联映射为 cascade="evict",则此操作级联到关联实例。

于 2012-12-03T07:11:19.607 回答