gpt4 book ai didi

java - 什么时候在 springs SimpleJpaRepository 中使用 saveAndFlush?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:36 24 4
gpt4 key购买 nike

我正在使用 spring-data-jpa interface CrudRepository 在每日批量导入时将大型数据集保存在数据库中。

@Bean
public ItemWriter<MyEntity> jpaItemWriter() {
RepositoryItemWriter<MyEntity> writer = new RepositoryItemWriter<>();
writer.setRepository(repository);
writer.setMethodName("save");
return writer;
}

此接口(interface)的默认实现是 SimpleJpaRepository,它提供了一个 saveAndFlush() 方法。那是做什么用的?如果我运行此方法而不是 save(),此方法是否对我有任何帮助,例如关于性能?

最佳答案

一个示例是,如果您正在使用开放式锁定并希望显式捕获 OptimisticLockException 并将其抛回给客户端。如果更改仅在事务提交时刷新到数据库(即当您的事务方法返回时),那么您不能这样做。从您的事务方法中显式刷新允许您捕获并重新抛出/处理。

来自 JPA 规范:

3.4.5 OptimisticLockException Provider implementations may defer writing to the database until the end of the transaction, when consistent with the lock mode and flush mode settings in effect. In this case, an optimistic lock check may not occur until commit time, and the OptimisticLockException may be thrown in the "before completion" phase of the commit. If the OptimisticLockException must be caught or handled by the application, the flush method should be used by the application to force the database writes to occur. This will allow the application to catch and handle optimistic lock exceptions

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

关于java - 什么时候在 springs SimpleJpaRepository 中使用 saveAndFlush?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27421706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com