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稍后处理。