Сохранить (список <S>) и сохранить (сущность) во второй части транзакции - PullRequest
0 голосов
/ 26 февраля 2019

Вопрос является последующим из CrudRepository и Hibernate: сохранить (список ) или сохранить (сущность) в транзакции .

Если я не отмечу следующее ниже знаком @транзакционный.Если соединение с базой данных обрывается или что-то происходит, когда Spring Data JPA сохраняет список.Откатится ли список или он будет частично сохранен?

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

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Методы, предоставляемые CrudRepository, уже являются транзакционными.

Это вообще не нужно, просто взгляните на эту реализацию.Все методы delete, deleteAll , saveAll are annotated with @ Transactional`.Это означает, что реализация по умолчанию уже принимает это во внимание.

На самом деле там, где нет аннотации @Transactional, используется значение по умолчанию @Transactional(readOnly = true), то есть на уровне класса.

0 голосов
/ 26 февраля 2019

Это сильно зависит от реализации MyEntityRepository.

Например, если он сгенерирован Spring как SimpleJpaRepository, он будет откатан.Потому что, как показано в связанном вопросе, метод save() также помечается @Transactional:

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

Но для любой другой реализации?Я бы сказал, что поведение не определено

...