Java Hibernate在会话中返回值,但不从数据库返回
我使用Java Hibernate在会话中返回值,但不从数据库返回,java,hibernate,session,nhibernate,jdbc,Java,Hibernate,Session,Nhibernate,Jdbc,我使用 getHibernateTemplate().get(A.class, 100) 从数据库中。假设此实体“A”在数据库中具有属性“value”200 现在,在我的Java代码中,我更改了这个实体的一个属性。比方说,我将“value”属性更改为“500”,然后将其添加到某个列表中 现在,如果我再次对同一个实体执行getHibernateTemplate().get(A.class,100),我将得到更新的实体(其值为500)。如何强制hibernate从数据库中获取实体,而不是在代码中
getHibernateTemplate().get(A.class, 100)
从数据库中。假设此实体“A”在数据库中具有属性“value”200
现在,在我的Java代码中,我更改了这个实体的一个属性。比方说,我将“value”属性更改为“500”,然后将其添加到某个列表中
现在,如果我再次对同一个实体执行getHibernateTemplate().get(A.class,100),我将得到更新的实体(其值为500)。如何强制hibernate从数据库中获取实体,而不是在代码中更新的实体
这就是所谓的“第一级缓存”吗?我建议在谷歌上搜索hibernate提交、刷新和分离,并在它们写入数据库时读取。更好的是,如果你还没有读过关于Hibernate的好书,我建议你读一本关于Hibernate的好书(在amazon.com上搜索好书的评论),以便更好地掌握这项技术 我回复这篇文章的原因不是直接回答您的问题,而是建议您编辑hibernate.cfg.xml文件,并将以下内容设置为true:
- 逐出(对象): 从会话缓存中删除此实例
- 刷新(对象): 从基础数据库重新读取给定实例的状态
- 清除(): 完全清除会话
Clear()
完全重置会话并重新启动
这有点激进,因为会话中的任何对象都不会在会话
Flush()
上更新/插入。。。但它可能是我们在这个场景中想要的(通常用于测试…加载、清除…更改和刷新)是的,这是一级缓存。您应该在修改之前分离旧实体或关闭连接/事务。如何分离旧实体?