Spring数据jpa中save和saveAndFlush的区别

Ana*_*and 119 java spring hibernate jpa spring-data-jpa

我试图通过测试一些CRUD操作来学习弹簧数据JPA JpaRepository.

我碰到两个方法savesaveAndFlush.我没有区分这两者.在调用时save我的更改也被保存到数据库中,因此有什么用处saveAndFlush.

use*_*305 126

saveAndFlush,改变将被刷新立即分贝此命令.有save,这不一定是真的,可能只留在内存中,直到flushcommit发出命令.

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

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

  • _"在此事务中提交之前,外部事务不会显示"_这取决于其他事务的隔离级别.如果事务的隔离级别为READ_UNCOMMITTED,则它将查看已刷新但尚未由其他事务提交的内容. (26认同)

Ral*_*alf 32

根据您正在使用的休眠刷新模式(AUTO默认情况下),save可能会也可能不会立即将更改写入数据库.当您调用时,saveAndFlush您正在强制执行模型状态与数据库的同步.

如果您使用刷新模式AUTO并且您正在使用您的应用程序首先保存然后再次选择数据,您将看不到bahvior之间的差异save(),saveAndFlush()因为select会先触发刷新.请参阅文档.

  • @Bludream是的,我的理解是对`save`的调用是幂等的.详情请参见本[主题](http://stackoverflow.com/questions/161224/what-are-the-differences-between-the-different-saving-methods-in-hibernate). (3认同)

小智 5

这两种方法都用于将实体保存到数据库中。刷新是将持久化上下文的状态与底层数据库同步的过程。

当使用saveAndFlush方法时,数据立即刷新到数据库,要使用save方法执行此操作,我们需要显式调用lush () 方法。使用刷新可以在同一事务期间但在提交之前读取稍后步骤中保存的更改。所以如果不需要commit还是可以rollback的