使用休眠@query获取半径内的位置

时间:2018-10-28 17:13:54

标签: hibernate spring-boot

我正在尝试使用休眠@query参数获取半径内的位置。

@Query("SELECT id, (6371 * acos (cos(radians(:latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians(:longitude))  + sin(radians(:latitude)) * sin(radians(latitude)))) AS distance FROM gang HAVING distance < :distance ORDER BY distance)")
List<Long> findNearbyGangs(@Param("latitude") double lat, @Param("longitude") double lng, @Param("distance") double distance);

但出现以下错误:

incompatible types: java.util.List<java.lang.Long> cannot be converted to java.util.List<com.example.Gang>

2 个答案:

答案 0 :(得分:0)

您遇到的问题是,您实际上试图从查询中获取数据到Long列表中,而实际上您需要一个Object列表。这是由于您每行获取多个值(id和距离)的缘故。更改以下代码,它应该可以工作。

@Query("SELECT id, (6371 * acos (cos(radians(:latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians(:longitude))  + sin(radians(:latitude)) * sin(radians(latitude)))) AS distance FROM gang HAVING distance < :distance ORDER BY distance)")
List<Object> findNearbyGangs(@Param("latitude") double lat, @Param("longitude") double lng, @Param("distance") double distance);

答案 1 :(得分:0)

您的方法名findNearbyGangs告诉它将返回附近的帮派(帮派实体列表),但是您返回的是List<Long>,这是查询的错误返回类型。

尝试返回List<Gang>