Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Не отрабатывает метод save() из CrudRepository


Автор: Leklerk 26.1.2024, 14:49
Добрый день! Подскажите пожалуйста, из-за чего может быть такое. При выполнении эндпоинта с методом PATCH не работает метод save() из CrudRepository. Никаких эксепшенов не возникает, просто в БД нет никакого эффекта после выполнения эндпоинта. Эндпоинт меняет статус банковской карты пользователя.
Код

@Override
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);
}

Автор: LSD 27.1.2024, 00:36
Для начала повесь на changeStatus(), или выше по стеку вызовов, аннотацию @Transactional.

Автор: Leklerk 27.1.2024, 11:11
Огромное спасибо!!! Да, дело оказалось в @Transactional - над классом CardServiceImpl, содержащим метод changeStatus, висела @Transactional(readOnly = true). То есть нужно либо убрать эту @Transactional(readOnly = true) над классом, либо добавить @Transactional над методом changeStatus, тогда всё работает. Вариант с @Transactional и для класса и для методов в статье на хабре описывается как хороший, выберу его.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)