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

JPA自定义原生查询中:s_polygoneDepartement参数未替换问题求助

问题根因

参数未被替换的核心原因是你将:s_polygoneDepartement占位符放在了单引号'的包裹范围内。JPA 原生查询执行参数绑定的时候,会将单引号内的所有内容识别为固定字符串常量,不会解析其中的参数占位符,因此最终生成的 SQL 会直接把引号内的内容当成固定值处理,和参数是否出现在=附近没有任何关系。

修复方案

ST_GeomFromGeoJSON 函数本身接收字符串类型的入参,你只需要把占位符直接作为函数的入参传入即可,不需要额外加单引号包裹,修正后的代码如下:

@Query(value =  " select *  from poi where ST_Intersects(geog , " +
            " ST_GeomFromGeoJSON(:s_polygoneDepartement)" +
            " ) = 'true' ",
            countQuery = " select  count(*)  from poi where ST_Intersects(geog , " +
                    " ST_GeomFromGeoJSON(:s_polygoneDepartement)" +
                    " ) = 'true' ",
            nativeQuery = true)
Page<Poi> findAllByNomDepartementFr(@Param("s_polygoneDepartement") String s_polygoneDepartement, Pageable pageable);

扩展说明

所有 JPA 原生查询的参数占位符都不能放在单引号内,如果你遇到需要拼接字符串的场景(比如模糊查询),可以使用数据库的CONCAT函数实现,错误写法like '%:keyword%',正确写法like CONCAT('%', :keyword, '%'),原理和本次问题完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:00:02