Ответ
В JPA/Hibernate сущность обновится в БД даже без явного вызова save(), если изменения произошли внутри активной транзакции и транзакция завершилась успешно (commit). Это работает благодаря механизму автоматического "dirty checking".
Пример:
@Transactional
public void updateUser(Long userId) {
User user = userRepository.findById(userId).orElseThrow();
user.setName("New Name"); // Изменение будет сохранено при коммите
// save() не вызывается явно
}
Условия для автоматического обновления:
- Сущность находится в состоянии managed (привязана к текущей сессии)
- Изменения происходят внутри транзакции
- Транзакция завершается успешно (commit)
Исключение: если используется readOnly=true в транзакции, изменения не сохранятся.