Seb*_*ber 8 java orm hibernate jpa java-ee
我们知道,在使用hibernate对数据库进行批量更新时(即使在HQL中),所做的更改不会复制到当前会话中存储的实体.
所以我可以调用session.refresh来加载我的会话实体的修改.
我们经常调用flush来将修改发送到DB,但文档说它"同步"会话和db ...
这是否意味着flush能够为我的会话实体设置好的新db值?或者flush会最终使用存储在实体中的旧数据库擦除我的新数据库值?(顺便说一句,如果hibernate的行为是第一个,它如何检测哪一个是"好的价值"?).
如果我不能在这种情况下使用flush,最好在每次批量更新后清除会话,以便我们确保在会话中有良好的值?
所有flush这一切都是将先前缓存的SQL语句发送到数据库.它不会更改已在会话中的对象.在某种程度上,它与你需要的相反.flush中的SQL语句可能会覆盖批量更新更改.你可能想要做的flush(),然后clear()你的更新之前.或者,如果您不想清除整个缓存,evict().我从来没有尝试,refresh()但似乎它也会起作用.