首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate缓存和自动提交说明

Hibernate缓存和自动提交说明
EN

Stack Overflow用户
提问于 2012-12-03 14:42:06
回答 1查看 108关注 0票数 0

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

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

奇怪的是,在我在控制器中做任何事情之前,我想要找到关于谁在做这个更改的信息。因此,我根据提交表单的人的Id从db中获取一个User-object。但是当这个user-object被获取时。然后自动提交表单中的用户...Im获取用户时如下所示:

代码语言:javascript
复制
User createdByUser = (User) getHibernateTemplate().find("from User u where u.username=?", username).get(0);

因此,很明显,某些机制正在自动提交我的用户。大多数情况下,我的createdByUser是与提交的用户相同的用户。有没有可能hibernate检测到了这一点,并以某种方式尝试同步数据库?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-03 15:11:20

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

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

来自文档:

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13678368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档