Java 何时在springs SimpleParepository中使用Save和Flush?
我正在使用SpringDataJPAJava 何时在springs SimpleParepository中使用Save和Flush?,java,spring,jpa,spring-data,spring-data-jpa,Java,Spring,Jpa,Spring Data,Spring Data Jpa,我正在使用SpringDataJPAInterfaceCrudrepository在每日批量导入时将大型数据集保存在数据库中 @Bean public ItemWriter<MyEntity> jpaItemWriter() { RepositoryItemWriter<MyEntity> writer = new RepositoryItemWriter<>(); writer.setRepository(repository); w
InterfaceCrudrepository
在每日批量导入时将大型数据集保存在数据库中
@Bean
public ItemWriter<MyEntity> jpaItemWriter() {
RepositoryItemWriter<MyEntity> writer = new RepositoryItemWriter<>();
writer.setRepository(repository);
writer.setMethodName("save");
return writer;
}
@Bean
公共项目编写器jpaItemWriter(){
RepositoryItemWriter writer=新的RepositoryItemWriter();
writer.setRepository(repository);
writer.setMethodName(“保存”);
返回作者;
}
此接口的默认实现是SimpleJpaRepository
,它提供了saveAndFlush()
方法。那是干什么用的?如果我运行此方法而不是save()
,saveAndFlush
,此方法对我是否有帮助(例如性能方面)
保存实体并立即刷新更改
如果您使用
save
方法,它会在底层事务提交时刷新更改。一个示例是,如果您使用乐观锁定,并希望显式捕获OptimisticLockException并将其返回给客户端。如果更改仅在事务提交时(即当事务方法返回时)刷新到数据库,则您不能这样做。事务方法中的显式刷新允许捕获和重新刷新/处理
根据JPA规范:
3.4.5 OptimisticLockException提供程序实现可将写入数据库的时间推迟到事务结束时,此时
与有效的锁定模式和刷新模式设置一致。在里面
在这种情况下,乐观锁检查可能在提交时才会发生,
OptimisticLockException可能会在“before”中抛出
提交的“完成”阶段如果必须执行OptimisticLockException
如果被应用程序捕获或处理,则应该使用flush方法
应用程序用于强制执行数据库写入。这
将允许应用程序捕获并处理乐观锁
例外情况
因此,在回答您的问题时,它与性能无关,但在某些情况下,您可能希望从事务方法中显式刷新到数据库