repository.save()
не обязательно сбрасывает изменения в базу данных.Это будет сделано только тогда, когда:
- достигнут конец транзакции (= конец метода
@Transactional
) - сделан зависимый вызов (например, когда выначать использовать
repository.findAll()
или repository.findOne(id)
) - ...
Это упоминается в документации Hibernate , а также транзакционная запись-позади :
Чтобы уменьшить конфликт блокировок в базе данных, физическая транзакция базы данных должна быть максимально короткой.Длинные транзакции базы данных не позволяют вашему приложению масштабироваться до высокой степени одновременной загрузки.Не держите транзакцию базы данных открытой во время работы на уровне конечного пользователя, но открывайте ее после завершения работы на уровне конечного пользователя.Эта концепция называется транзакционной записью.
Это означает, что если ваша база данных не работает в момент сброса изменений, вы должны получить исключение.Однако это может произойти в конце метода, где-то еще, ....
Это также причина, почему иногда бывает трудно отследить, почему произошло исключение, потому что сброс мог быть вызван намного позжечем когда фактическое сохранение происходит в коде.
Вы можете вручную выполнить сброс в базу данных при необходимости, если вы используете методы repository.flush()
или repository.saveAndFlush()
, но обычно вам не следует этого делать.