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

如何通过JPA原生查询调用接收BIGINT[]参数的PostgreSQL函数

解决JPA原生查询调用PostgreSQL数组参数函数的问题

可行实现方案

下面两种方法都能正确传递PostgreSQL数组参数,解决你的调用问题:

方案1:通过CAST转换参数类型

在原生查询里用CAST把传入的集合转成PostgreSQL的BIGINT[]类型,同时用命名参数明确绑定:

Repository层代码:

@Query(nativeQuery = true, value = "SELECT * FROM public.func_anonymize_business(CAST(:businessIds AS BIGINT[]))")
void deactivateAndAnonymizeBusiness(@Param("businessIds") List<Long> businessIds);

Service层直接用你原来的调用逻辑即可:

ArrayList<Long> ids = new ArrayList<>();
ids.add(businessId);
businessRepository.deactivateAndAnonymizeBusiness(ids);

方案2:使用PostgreSQL数组构造语法

借助PostgreSQL的ARRAY[]构造函数,配合类型转换:

Repository层代码:

@Query(nativeQuery = true, value = "SELECT * FROM public.func_anonymize_business(ARRAY[:businessIds]::BIGINT[])")
void deactivateAndAnonymizeBusiness(@Param("businessIds") List<Long> businessIds);

Service层调用同上。

原方式报错原因

  • 方式一报错:传递List<Long>时,JPA默认会把集合拆成多个独立参数,PostgreSQL收到的是单个bigint值而非数组,所以找不到对应签名的函数。
  • 方式二报错:传递Long[]数组时,JPA没有自动转成PostgreSQL数组类型,反而把它当作二进制数据(bytea)处理,导致函数匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:36:12