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

Spring Boot调用Oracle PL/SQL原生查询成功却抛出NegativeArraySizeException异常

异常触发原因
  • 你的insertAndForget属于DML写操作,但未添加@Modifying注解标识。Spring Data JPA默认将所有不带@Modifying的@Query方法判定为查询操作,会尝试读取并解析方法执行后的结果集。
  • 你使用的PL/SQL匿名块执行完成后不会返回任何结果集,Hibernate在解析结果集元数据时获取到的返回列数为-1,后续初始化结果处理数组时直接抛出NegativeArraySizeException: -1异常。
  • 数据库端执行正常是因为PL/SQL本身逻辑无错误,该异常完全是应用层Hibernate解析不存在的结果集导致,和数据库执行逻辑无关。
解决方案

直接给insertAndForget方法添加@Modifying注解,标识该方法为修改操作,不需要解析返回结果集即可解决问题。如果当前调用上下文没有事务,建议同步添加@Transactional注解保证DML操作的事务支持。修改后的代码如下:

@Repository
public interface SeenMessageRepository extends JpaRepository<SeenMessage, Long> {

    @Modifying
    @Transactional
    @Query(value = "begin " +
            "insert into SEEN_MESSAGE(ID, MESSAGE_ID, USER_ID, SEEN_DATE) " +
            "values(seen_message_seq.nextval, :MId , :UId , CURRENT_TIMESTAMP ); " +
            "exception " +
            "when dup_val_on_index THEN " +
            "RETURN; " +
            "end;", nativeQuery = true)
    void insertAndForget(Long MId, Long UId);
}

内容的提问来源于stack exchange,提问作者Sobhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:15:04