在hibernate批量更新后,清除会话,刷新,刷新?

我们知道,在使用hibernate对数据库进行批量更新时(即使在HQL中),所做的更改不会复制到当前会话中存储的实体。

所以我可以调用session.refresh来加载对我的会话实体的修改。

我们经常调用flush来将修改发送到DB,但是文档说它“同步”会话和db …

这是否意味着flush能够为我的会话实体设置好的新db值? 或者flush会最终删除存储在实体中的旧数据库的新数据库值? (顺便说一句,如果hibernate的行为是第一个,它如何检测哪一个是“好的价值”?)。

如果我不能在这种情况下使用flush,那么在每次批量更新后清除会话是一个好习惯,这样我们肯定会在会话中有好的值?

所有flush都会将先前缓存的SQL语句发送到数据库。 它不会更改已在会话中的对象。 在某种程度上,它与你需要的相反。 flush中的SQL语句可能会覆盖批量更新更改。 您可能想要做的是在更新之前flush()然后clear() 。 或者,如果您不想清除整个缓存,则evict() 。 我从来没有尝试过refresh()但似乎它也会起作用。