Spring数据jpa中save和saveAndFlush的区别

时间:2014-01-18 12:07:52

标签: java spring hibernate jpa spring-data-jpa

我试图通过JpaRepository测试一些CRUD操作来学习spring数据JPA。

我遇到了两种方法savesaveAndFlush。 我没有区分这两者。在调用save时,我的更改也会保存到数据库中,因此saveAndFlush的用途是什么。

2 个答案:

答案 0 :(得分:117)

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

但请注意,即使您刷新了事务中的更改并且未提交它们,在此事务中提交之前,对于外部事务仍然可以 更改。

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

答案 1 :(得分:27)

根据您使用的休眠刷新模式(默认为AUTOsave可能会也可能不会立即将您的更改写入数据库。当您致电saveAndFlush时,您正在强制将模型状态与数据库同步。

如果您使用刷新模式AUTO并且您正在使用应用程序首先保存然后再次选择数据,则save()saveAndFlush()之间的bahvior不会发现差异,因为选择触发了先冲洗。请参阅documention