React调用SpringBoot API执行MySQL无参存储过程updatebalance失败排查
问题排查与修复方案
1. React调用未执行函数(最直接原因)
你的React调用代码里,await CheckbookService.updateBalance 只是引用了函数对象,没有执行函数,导致根本没发送POST请求到后端。
修正后的React调用代码:
await CheckbookService.updateBalance(); // 加上括号,执行函数
2. Spring Boot存储过程调用的注解补充
JPA调用修改类存储过程时,需要添加@Modifying和@Transactional注解,确保事务生效并识别为数据修改操作:
修改CheckbookRepository代码:
@Repository public interface CheckbookRepository extends JpaRepository<Checkbook, Long> { List<Checkbook> findAll(); @Modifying @Transactional @Procedure(procedureName = "updatebalance") void updateBalance(); }
3. 控制器返回值优化
原控制器方法返回void,axios可能因无响应内容触发异常。建议返回标准响应实体:
修改控制器代码:
@PostMapping("/updatebalance") @Transactional public ResponseEntity<Void> updateBalance() { checkbookRepository.updateBalance(); return ResponseEntity.ok().build(); }
4. 数据库权限验证
检查Spring Boot配置的数据库连接用户(若不是root@localhost)是否有执行updatebalance存储过程的权限,执行以下SQL授权:
GRANT EXECUTE ON PROCEDURE updatebalance TO '你的数据库用户'@'你的连接地址'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者HighwayRob
相关产品推荐
相关产品推荐

