CrudRepository и Hibernate: сохранить (список <s>) и сохранить (сущность) в транзакции</s>

Будет ли это иметь значение, если я это сделаю:

@Transactional
public void processData() {
    List<MyEntity> entities = ....;
    MyEntityRepository.save(entities);
}

против

@Transactional
public void processData() {
    List<MyEntity> entities = ....;
    for (MyEntity entity : entities) {
        MyEntityRepository.save(entity);
    }
}

В чем разница в терминах базовых запросов и производительности?

Ответ 1

От SimpleJpaRepository:

@Transactional
public <S extends T> List<S> More save(Iterable<S> entities) {

    List<S> result = new ArrayList<S>();

    if (entities == null) {
        return result;
    }

    for (S entity : entities) {
        result.add(save(entity));
    }

    return result;
}

Таким образом, ваш второй бизнес-метод только тени save(Iterable<S> entities) метод Crud Repository, в том смысле, что он выполняет итерацию списка и вызывает save(S) от вашего имени.

Пока транзакция демаркируется из вашего бизнес-метода processData, нет никакой разницы в производительности или запросах.