从理论上讲,你(作为JPA的用户)不应该(或者在绝对罕见的情况下)进入调用flush()的情况.
Flushing is the process of synchronizing the underlying persistent
store with persistable state held in memory
换句话说,在flush()上,所有插入,更新,删除或在数据库上实际调用的任何语句,在flush()之前没有任何事情发生在您的数据库上.刷新是由提交事务或某些类型的数据库读取引起的.例如,如果执行JPQL查询,则必须执行flush()以从数据库中获取正确的结果.但是,通过JPA实现了解并完全处理这一点非常好.
在某些情况下,您可能希望自己控制此刷新,然后可以使用flush()调用它.
编辑以回答评论中的问题:
不是每次读取都需要刷新,请考虑这种情况(一个事务):
>读一个人Person p = em.find(Person.class,234)
>更新人物p.setAge(31)
>阅读建筑物B = em.find(Building.class,123
>从建筑物b中读取带有JPQL查询的建筑物b,其中b.id = 123
自动刷新仅在4之前发生,因为Eclipselink无法确定您要读取的内容,因此在读取之前,此人的年龄必须是最新的. 3.之前没有需要刷新,因为Eclipselink知道一个人的更新不会影响建筑物.