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

原生SQL查询传递参数值遇单引号包围问题求助

原生SQL传递时间间隔参数失败的问题

我花了大量时间解决向原生SQL查询传递参数值的问题,核心问题应该是生成的查询语句中参数值的单引号处理不当。

正常运行的硬编码查询

以下硬编码参数值的查询可以正常执行(已省略无关部分):

var query = 
"""
select
...
and ss.status_date < now() AT TIME ZONE 'UTC' - interval '70' minute
...
""";

带单引号传递参数的尝试及错误

尝试传递参数时,我在参数外添加了单引号:

var query = 
"""
select
...
and ss.status_date < now() AT TIME ZONE 'UTC' - interval ':x' minute
...
""";

var searchQuery = em.createNativeQuery(query, BikeEntity.class);
searchQuery.setParameter("x", 70);

出现错误:

java.lang.IllegalArgumentException: Could not locate named parameter [x], expecting one of []

去掉单引号传递参数的尝试及错误

去掉参数外的单引号后:

var query = 
"""
select
...
and ss.status_date < now() AT TIME ZONE 'UTC' - interval :x minute
...
""";

错误信息变为:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"
  Position: 205

已尝试的方案

我试过StackOverflow上关于「原生查询使用命名参数失败,提示‘未设置所有命名参数’」的多种解决方案,但都没能解决问题。

使用环境

  • Java 17
  • SpringBoot 2.7.6
  • PostgreSQL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:25:06