我得到一个实体“ A”使用
getHibernateTemplate().get(A.class, 100)
从数据库中。假设该实体“ A”在数据库中具有属性“值” 200。
现在,在我的Java代码中,我更改了该实体的属性。可以说,我将“值”属性更改为“ 500”,然后将其添加到某些列表中。
现在,如果我再次对同一个实体执行getHibernateTemplate()。get(A.class,100),我将获取更新后的实体(值500)。如何强制休眠从数据库中获取实体,而不从代码中更新实体?
这就是所谓的“一级缓存”吗?
您的假设(关于第一级缓存)是正确的。如此处所述:接口会话:
Java应用程序和Hibernate之间的主要运行时接口。这是中心的API类,抽象了持久性服务的概念。
或者在这里第2章。2.1。总览
提取:会话(org.hibernate.Session)
单线程,短暂的对象,表示应用程序与持久性存储之间的对话。它包装了JDBC连接,并且是Transaction的工厂。会话拥有持久性对象的强制性第一级缓存,该持久性对象在导航对象图或按标识符查找对象时使用。
此外,您还可以查看我们可用的方法,以从会话中删除对象:
evict(Object object):从会话缓存中删除此实例。
refresh(Object object):从底层数据库重新读取给定实例的状态。
还有很多。Evict
在这种情况下应该可以正常工作。我们必须采用当前实例('A'),Evict
并从会话中显式地获取它。
如果我们已经加载了一些/更多东西,并且不知道要做什么Evict()
,我们只需要获取新数据即可。然后,我们可以致电Clear()
以完全重置会话,然后重新开始。
这有点激进,因为会话中的任何对象都不会在会话中更新/插入Flush()
...但是这可能是我们在这种情况下想要的(经常用于测试...加载,清除...更改并冲洗)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句