hibernate - 自定义查询不使用参数
问题描述
花了几个小时试图弄清楚为什么我的自定义请求不起作用。
我想我明白了:该参数不适用于请求-> 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
.