请告诉我可能是什么原因造成的。使用 PATCH 方法执行端点时,CrudRepository 中的 save() 方法不起作用。没有发生异常,端点执行后数据库中根本没有任何影响。端点更改用户银行卡的状态。
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);
}
问题原来是包含changeStatus 方法的CardServiceImpl 类有@Transactional(readOnly = true) 挂在它上面。也就是说,要解决我的问题,您需要删除类上方的这个 @Transactional(readOnly = true) ,或者在 changeStatus 方法上方添加 @Transactional ,然后一切正常。Habré 文章中的类和方法都带有 @Transactional 的选项被描述为很好,我会选择它。