自定义查询不使用参数

The custom query does not use the parameter

我花了几个小时才弄清楚为什么我的自定义请求不起作用。

我想我明白了:参数不适用于请求 -> Jpa 使用 's_polygoneDepartement' 发出请求而不是用值替换它,但我不明白为什么。

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

我认为这是因为:s_polygoneDepartement 不接近“=”,但在这种情况下如何让它理解它应该用收到的值替换:s_polygoneDepartement?

谢谢

对我来说,似乎不需要你的换行符 (\n)。因为您将参数包装到 '\n {} \n' Spring 中,所以它可能会像 String 一样对待它,而不是可以用给定参数替换的东西。

试试:

@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);

或者,您可以尝试使用索引查询参数而不是命名参数。然后你可以丢弃 @Parameter() 并在查询中使用 ?1 而不是 :s_polygoneDepartement.