Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.168] |
|
Сообщ.
#1
,
|
|
|
Добрый день! Подскажите пожалуйста, из-за чего может быть такое. При выполнении эндпоинта с методом 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); } |
Сообщ.
#2
,
|
|
|
Дело оказалось в том, что над классом CardServiceImpl, содержащим метод changeStatus, висела @Transactional(readOnly = true). То есть, для решения моей проблемы нужно либо убрать эту @Transactional(readOnly = true) над классом, либо добавить @Transactional над методом changeStatus, тогда всё работает. Вариант с @Transactional и для класса и для методов в статье на хабре описывается как хороший, выберу его.
|