我很难弄清楚为什么在我的应用程序中会发生一些事情。使用spring、Hibernate和struts2,我在调试过程中注意到了一些非常奇怪的东西。
我有一个用户表单,其中用户可以编辑他的信息。当这个表单被提交时,控制器的save()方法应该做一些事情并保存用户。
奇怪的是,在我在控制器中做任何事情之前,我想要找到关于谁在做这个更改的信息。因此,我根据提交表单的人的Id从db中获取一个User-object。但是当这个user-object被获取时。然后自动提交表单中的用户...Im获取用户时如下所示:
User createdByUser = (User) getHibernateTemplate().find("from User u where u.username=?", username).get(0);因此,很明显,某些机制正在自动提交我的用户。大多数情况下,我的createdByUser是与提交的用户相同的用户。有没有可能hibernate检测到了这一点,并以某种方式尝试同步数据库?
发布于 2012-12-03 15:11:20
这可能是因为您正在对托管实体进行更改。因此,这些更改将与数据库同步&下次获取该实体时,您将隐式地获取反映了更改的实体。
在执行搜索之后,您可以清除持久性上下文以分离所有底层实体,也可以显式地将单个实体从会话中分离出来。
来自文档:
clear () :完全清除会话。驱逐所有加载的实例,取消所有挂起的保存、更新和删除操作。不要关闭打开的迭代器或ScrollableResults实例。
evict(object) :从会话缓存中删除此实例。对实例所做的更改将不会与数据库同步。如果关联使用cascade=“evict”映射,则此操作将级联到关联实例。
https://stackoverflow.com/questions/13678368
复制相似问题