在Spring数据jpa中save和saveAndFlush之间的区别

我正在尝试通过JpaRepositorytesting一些CRUD操作来学习Spring数据JPA。

我遇到了两个方法savesaveAndFlush 。 我不明白这两者之间的区别。 在调用save也我的变化被保存到数据库,所以saveAndFlush的使用是saveAndFlush

saveAndFlush ,更改将立即在此命令中刷新到DB。 save ,这不一定是真实的,并可能留在内存中,直到flushcommit命令发出。

但是请注意,即使您刷新了事务中的更改并且不提交它们,直到在此事务中提交之前,这些更改仍然不会对外部事务可见。

在你的情况下,你可能使用某种事务机制,如果一切正常,它commit为你发出commit命令。

根据您使用的hibernate模式( AUTO是默认设置),保存可能会或可能不会将您的更改直接写入数据库。 当您调用saveAndFlush时,您正在强制模型状态与数据库同步。

如果使用刷新模式AUTO,并且使用应用程序先保存,然后再次select数据,则不会在save()saveAndFlush()之间看到bahvior的差异,因为select会首先触发flush。 见文件 。