Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 何时在springs SimpleParepository中使用Save和Flush?_Java_Spring_Jpa_Spring Data_Spring Data Jpa - Fatal编程技术网

Java 何时在springs SimpleParepository中使用Save和Flush?

Java 何时在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

我正在使用SpringDataJPA
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方法 应用程序用于强制执行数据库写入。这 将允许应用程序捕获并处理乐观锁 例外情况

因此,在回答您的问题时,它与性能无关,但在某些情况下,您可能希望从事务方法中显式刷新到数据库