Ответ
Прямого метода update в стандартном репозитории (JpaRepository) нет. Это связано с концепцией JPA: сущности, загруженные в контексте persistence (управляемые), автоматически отслеживаются. Изменения в их полях синхронизируются с БД при коммите транзакции.
Основные способы обновления:
-
Изменение управляемой сущности (наиболее частый способ):
@Transactional public void updateUserName(Long userId, String newName) { User user = userRepository.findById(userId).orElseThrow(); user.setName(newName); // Изменение отслеживается // Метод save() не обязателен, но может быть вызван для ясности // userRepository.save(user); } // При завершении транзакции изменения flush'утся в БД -
Использование
save(): Методsave()выполняетmerge()— если у сущности есть ID, она будет обновлена. -
Именованный или нативный запрос с
@Modifying:@Repository public interface UserRepository extends JpaRepository<User, Long> { @Modifying // Указывает, что запрос изменяет данные @Query("UPDATE User u SET u.email = :email WHERE u.id = :id") @Transactional // Необходимо для модифицирующих операций int updateUserEmail(@Param("id") Long id, @Param("email") String email); }Важно: Методы с
@Modifyingдолжны выполняться внутри транзакции (@Transactional).