在我看到的大多数代码(Spring)中,似乎没有人从存储库中调用entityManager.flush()
。这有什么理由吗?
答案 0 :(得分:2)
是的,有一个原因。默认情况下,在提交事务之前,或在执行查询结果可能取决于未刷新的修改之前,会自动调用flush()
。因此几乎不需要明确的flush()
。
尽可能晚地刷新是一件好事,因为它可以避免在事务被回滚时执行查询。
答案 1 :(得分:-1)
通常,如果您的JPA代码正确包含在事务中,则会自动执行flush。如果在代码执行期间查看日志,可以看到:
因此,如果您想要明确' flush'那么,flush命令很有用。
Animal animal = new Animal();
animal.setName(“Pluto”);
entityManager.persist(animal); /* pluto is saved here */
Owner owner = new Owner();
owner.setName(“Mickey”);
animal.setOwner(owner);
entityManager.persist(owner); /* mickey is saved here */
owner.setName(“Minnie”);
entityManager.merge(owner);
animal.setName(“Mickey”);
entityManager.merge(animal);
/* pluto and mickey are updated here, just before the find query */
Query q = entityManager.createQuery(“FROM Animal a”);