gpt4 book ai didi

java - spring data save iterable方法是否使用批量操作并按相同顺序返回结果?

转载 作者:行者123 更新时间:2023-11-30 05:25:17 24 4
gpt4 key购买 nike

我有一个需要使用 Spring 数据持久保存的实体列表。他们中的一些人已经有 ID,而另一些则没有。阅读其他类似问题后,我意识到存储库方法 save(Iterable<S> iterable)内部使用 ArrayList,因此结果始终保持相同的顺序。但让我紧张的是它在实现中使用每个循环并一一保存实体:

@Transactional
public <S extends T> List<S> save(Iterable<S> entities) {
List<S> result = new ArrayList();
if (entities == null) {
return result;
} else {
Iterator var3 = entities.iterator();

while(var3.hasNext()) {
S entity = var3.next();
result.add(this.save(entity));
}

return result;
}
}

由于我的任务的特殊性,我绝对需要以相同的顺序获得结果,我的实际任务是数据库请求优化,并且我总是假设当我将集合传递给保存方法时,它使用 hibernate 的批处理操作,但现在我想知道这是否属实。

如果不是,是否可以使用 Spring 数据执行 BATCH 插入/更新操作,并按照我传入的顺序获取结果实体,或者我只是在想象?

最佳答案

正如您从代码中看到的,元素的顺序实际上被保留了。尽管对于 CrudRepository.saveAll 方法的实现并没有严格保证这一点,但它不太可能改变,据我所知,没有理由改变它。

正如 M.Deinum 指出的那样,Hibernate 中的批处理与保存操作的顺序完全无关,并且取决于 Hibernate 的配置。

所以是的:使用 Spring Data JPA 可以进行批处理。

关于java - spring data save iterable方法是否使用批量操作并按相同顺序返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58799915/

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