在hibernate批量更新后,清除会话,刷新,刷新?
我们知道,在使用hibernate对数据库进行批量更新时(即使在HQL中),所做的更改不会复制到当前会话中存储的实体。
所以我可以调用session.refresh来加载对我的会话实体的修改。
我们经常调用flush来将修改发送到DB,但是文档说它“同步”会话和db …
这是否意味着flush能够为我的会话实体设置好的新db值? 或者flush会最终删除存储在实体中的旧数据库的新数据库值? (顺便说一句,如果hibernate的行为是第一个,它如何检测哪一个是“好的价值”?)。
如果我不能在这种情况下使用flush,那么在每次批量更新后清除会话是一个好习惯,这样我们肯定会在会话中有好的值?
所有flush
都会将先前缓存的SQL语句发送到数据库。 它不会更改已在会话中的对象。 在某种程度上,它与你需要的相反。 flush中的SQL语句可能会覆盖批量更新更改。 您可能想要做的是在更新之前flush()
然后clear()
。 或者,如果您不想清除整个缓存,则evict()
。 我从来没有尝试过refresh()
但似乎它也会起作用。
- Java ZonedDateTime保存在数据库中
- Hibernate.initialize()的工作原理
- Hibernate-懒得初始化一个角色集合:beans.Language.patients,无法初始化代理 – 没有Session
- 如何在hibernate中更新多个表?
- Hibernate Criteria查询:获取具有m..n关系的对象列表,其中子表没有特定属性
- 如何在JPA中构造插入查询
- 来自多个数据库的Hibernate实体
- java.lang.UnsupportedOperationException:应用程序必须提供JDBC连接
- 基于Hibernate的Java Servlet应用程序中的Hibernate Communications Link失败,由MySQL提供支持