You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用自定义查询时Jpa Repository抛出JDBC执行异常

问题分析与修复方案

核心问题:修改操作缺失@Modifying注解

你的removeBookFromListR方法执行DELETE语句,但未添加@Modifying注解。JPA默认将不带该注解的@Query方法视为查询操作,执行修改类SQL时会触发JDBC异常——因为它预期返回查询结果集,而非执行数据变更。

修正后的完整代码

public interface BookRepository extends JpaRepository<Book, Long> {

    @Modifying
    @Query(value = "DELETE FROM bookbelongto WHERE userid = ?1 AND bookid = ?2", nativeQuery = true)
    void removeBookFromListR(Long userid, Long bookid);


    @Modifying
    @Query(value = "INSERT INTO bookbelongto(userid, bookid) VALUES(:pId, :bId)", nativeQuery = true)
    int saveBookToPersonR(@Param("pId") Long pId, @Param("bId") Long bId);
}

额外注意点

  • 事务要求:执行数据修改的方法必须在事务环境下运行,确保调用这些方法的服务类或方法上标注了@Transactional注解,否则可能抛出事务相关异常。
  • 字段名匹配:确认SQL中的字段名(userid、bookid)和数据库表的实际字段名完全一致,大小写敏感的数据库(如PostgreSQL)需严格对应。
  • 返回值优化:可以将removeBookFromListR的返回类型改为int,这样能获取本次操作受影响的行数,便于验证操作是否生效。

内容的提问来源于stack exchange,提问作者Muhammad Ahmad Adnan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 03:05:06