Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据jpa中save和saveAndFlush的区别_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java Spring数据jpa中save和saveAndFlush的区别

Java Spring数据jpa中save和saveAndFlush的区别,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我试图通过JpaRepository测试一些CRUD操作来学习spring数据JPA 我遇到了两种方法save和saveAndFlush。 我不明白这两者之间的区别。在调用save时,我的更改也会被保存到数据库中,因此saveAndFlush在saveAndFlush上的saveAndFlush有什么用,更改会在该命令中立即刷新到数据库中。使用save,这不一定是真的,并且可能只保留在内存中,直到发出flush或commit命令 但是请注意,即使刷新事务中的更改并且不提交它们,在该事务中提交之前

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

我遇到了两种方法
save
saveAndFlush

我不明白这两者之间的区别。在调用
save
时,我的更改也会被保存到数据库中,因此
saveAndFlush
saveAndFlush
上的
saveAndFlush有什么用,更改会在该命令中立即刷新到数据库中。使用
save
,这不一定是真的,并且可能只保留在内存中,直到发出
flush
commit
命令

但是请注意,即使刷新事务中的更改并且不提交它们,在该事务中提交之前,外部事务仍然不会看到这些更改


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

取决于您使用的休眠刷新模式(
AUTO
是默认模式)
save
可能会也可能不会立即将更改写入数据库。当您调用
saveAndFlush
时,您正在强制将模型状态与数据库同步


如果使用自动刷新模式,并且使用应用程序先保存数据,然后再次选择数据,则不会看到
save()
saveAndFlush()
之间的bahvior差异,因为选择首先触发刷新。请参阅。

抱歉,但是如果我
保存一个实体,然后再次保存同一个实体,您的意思是使用
保存
第二个命令不会引发复制异常,例如???@Bludream是的,我的理解是,
保存
的调用是幂等的。有关更多详细信息,请参阅此部分。“在此事务中提交之前,外部事务将不可见”取决于其他事务的隔离级别。如果事务的隔离级别为READ_UNCOMMITTED,则它将看到其他事务已刷新但尚未提交的内容。但是,在我的项目中,我使用save()、saveAll()&它在DB中保持不变,而不显式地进行commit或flush调用。那我为什么要选择saveAndFlush呢?刷新模式所有这些都是默认模式p Satish Patro,saveAndFlush()用于立即刷新。如果使用save(),刷新操作将由JPA稍后处理。