原生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
相关产品推荐
相关产品推荐

