Не отрабатывает метод save() из CrudRepository (никакого эффекта в БД)
Подскажите пожалуйста, из-за чего может быть такое. При выполнении эндпоинта с методом PATCH не работает метод save() из CrudRepository. Никаких эксепшенов не возникает, просто в БД нет никакого эффекта после выполнения эндпоинта. Эндпоинт меняет статус банковской карты пользователя.
public boolean changeStatus(UUID cardId, String newStatus) {
boolean result = false;
Optional<Card> cardOpt = cardRepository.findById(cardId);
if (cardOpt.isPresent()) {
Card card = cardOpt.get();
card.setStatusType(StatusType.valueOf(newStatus));
cardRepository.save(card);
result = true;
}
return result;
}
public interface CardRepository extends JpaRepository<Card, UUID> {
List<Card> findCardsByAccountId(UUID accountId);
List<Card> findCardsByClientId(UUID clientID);
@Query(value = "SELECT status FROM card WHERE id = :cardId", nativeQuery = true)
Optional<String> findStatusById(@Param("cardId") UUID cardId);
}
Ответы (1 шт):
Дело оказалось в том, что над классом CardServiceImpl, содержащим метод changeStatus, висела @Transactional(readOnly = true). То есть, для решения моей проблемы нужно либо убрать эту @Transactional(readOnly = true) над классом, либо добавить @Transactional над методом changeStatus, тогда всё работает. Вариант с @Transactional и для класса и для методов в статье на хабре описывается как хороший, выберу его.