我试图通过JpaRepository
测试一些CRUD操作来学习spring数据JPA。
我遇到了两种方法save
和saveAndFlush
。
我没有区分这两者。在调用save
时,我的更改也会保存到数据库中,因此saveAndFlush
的用途是什么。
答案 0 :(得分:117)
在saveAndFlush
上,此命令中的更改将立即刷新到DB。对于save
,这不一定是真的,并且可能只留在内存中,直到发出flush
或commit
命令。
但请注意,即使您刷新了事务中的更改并且未提交它们,在此事务中提交之前,对于外部事务仍然可以 更改。
在您的情况下,您可能使用某种事务机制,如果一切正常,它会为您发出commit
命令。
答案 1 :(得分:27)
根据您使用的休眠刷新模式(默认为AUTO
)save
可能会也可能不会立即将您的更改写入数据库。当您致电saveAndFlush
时,您正在强制将模型状态与数据库同步。
如果您使用刷新模式AUTO并且您正在使用应用程序首先保存然后再次选择数据,则save()
和saveAndFlush()
之间的bahvior不会发现差异,因为选择触发了先冲洗。请参阅documention。