У меня есть список сущностей, которые мне нужно сохранить, используя данные весны. Некоторые из них уже имеют идентификаторы, а некоторые нет. Прочитав другие подобные вопросы, я понял, что метод репозитория 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;
}
}
Из-за особенностей моей задачи мне абсолютно НЕОБХОДИМО, чтобы результаты были одинаковымипорядок, Моей реальной задачей является оптимизация запросов к БД, и я всегда предполагал, что когда я передаю коллекцию методу сохранения, он использует пакетные операции с гибернацией, но теперь мне интересно, действительно ли это так.
В случаеэто не так, возможно ли вообще выполнить операцию вставки / обновления BATCH с данными пружины и получить объекты результатов в том же порядке, в котором я их передал, или я просто представляю себе что-то?