Java 如何通过Spring boot查询区域内的点?
如果我在pgAdmin4中运行这个查询命令,它可以正常工作。 但当我运行spring boot项目时,发生了一个错误:Java 如何通过Spring boot查询区域内的点?,java,spring-boot,postgis,Java,Spring Boot,Postgis,如果我在pgAdmin4中运行这个查询命令,它可以正常工作。 但当我运行spring boot项目时,发生了一个错误: @Query("SELECT w FROM ${WalkEntity.TABLE_NAME} AS w WHERE ST_Within(w.start_point, ST_MakePolygon('LINESTRING(41.15294130710586 113.20090225705104, 41.15294130710586 115.97018471050012, 37.5
@Query("SELECT w FROM ${WalkEntity.TABLE_NAME} AS w WHERE ST_Within(w.start_point, ST_MakePolygon('LINESTRING(41.15294130710586 113.20090225705104, 41.15294130710586 115.97018471050012, 37.53742712587926 115.97018471050012, 37.53742712587926 113.20090225705104, 41.15294130710586 113.20090225705104)')) AND w.visibility=0 AND w.state=0 ORDER BY w.start_time DESC")
@Query(“从${WalkEntity.TABLE_NAME}w中选择w,其中ST_DistanceSphere(w.start_point,ST_MakePoint(?1,?2))我假设这是SQL查询。因此您必须将nativeQuery设置为true:
@Query("SELECT w FROM ${WalkEntity.TABLE_NAME} w WHERE ST_DistanceSphere(w.start_point, ST_MakePoint(?1, ?2)) <= ?3*1000" +
" AND w.visibility=${WalkEntity.VISIBLE_TO_ALL} AND w.state=${WalkEntity.STATE_VISIBLE}" +
" ORDER BY w.start_time DESC")
fun findNearby(latitude: Double, longitude: Double, km: Int, pageable: Pageable = PageRequest.of(0, 18)): List<WalkEntity>
另一方面,坐标必须先表示为经度,然后表示为纬度。您的问题已解决。但使用JPA查询时发生另一个错误。在ResultSet
中找不到列。我在entity类中有该列。方法签名是什么?很抱歉,我的英语不好。最后,我在本页找到了解决方案:
@Query("SELECT w FROM ${WalkEntity.TABLE_NAME} w WHERE ST_DistanceSphere(w.start_point, ST_MakePoint(?1, ?2)) <= ?3*1000" +
" AND w.visibility=${WalkEntity.VISIBLE_TO_ALL} AND w.state=${WalkEntity.STATE_VISIBLE}" +
" ORDER BY w.start_time DESC")
fun findNearby(latitude: Double, longitude: Double, km: Int, pageable: Pageable = PageRequest.of(0, 18)): List<WalkEntity>
@Query("SELECT w FROM ${WalkEntity.TABLE_NAME} AS w WHERE ST_Within(w.start_point, ST_MakePolygon('LINESTRING(41.15294130710586 113.20090225705104, 41.15294130710586 115.97018471050012, 37.53742712587926 115.97018471050012, 37.53742712587926 113.20090225705104, 41.15294130710586 113.20090225705104)')) AND w.visibility=0 AND w.state=0 ORDER BY w.start_time DESC"
, nativeQuery=true)