Hibernate Cache和自动提交说明

时间:2012-12-03 06:42:06

标签: hibernate

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

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

奇怪的是,在我在控制器中执行任何操作之前,我想查找有关谁正在执行此更改的信息。所以我根据提交表单的人的ID来从数据库中获取用户对象。但是当获取此用户对象时。然后自动提交表单中的用户... 我像这样提取用户:

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

所以显然有些机制是自动提交我的用户。 大多数情况下,我的createdByUser与提交的用户是同一个用户。可能有hibernate检测到这个并以某种方式尝试同步db?

1 个答案:

答案 0 :(得分:0)

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

执行搜索后,您可以清除持久性上下文以分离所有基础实体,或者可以明确地从会话中分离单个实体。

来自文档:

  

clear():完全清除会话。驱逐所有已加载的实例和   取消所有待处理的保存,更新和删除。不要关闭   迭代器或ScrollableResults的实例。

     

逐出(对象):从会话缓存中删除此实例。改变了   实例不会与数据库同步。这个操作   如果关联映射,则级联到关联实例   级联= “逐出”。