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;
        }
    }

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

如果不是这样,是否甚至可以用spring数据执行BATCH插入/更新操作,并以与我传入然后传递的顺序相同的顺序获取结果实体,或者我只是在想像呢?

wangxuchen37 回答:spring数据保存可迭代方法是否使用批处理操作并按相同顺序返回结果?

从代码中可以看到,实际上保留了元素的顺序。尽管对于CrudRepository.saveAll方法的实现并不能严格保证这一点,但是不太可能更改,因为AFAIK没有理由对其进行更改。

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

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

本文链接:https://www.f2er.com/3124849.html

大家都在问