Получение местоположения в радиусе, используя hibernate @query - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь получить местоположение в радиусе, используя параметр hibernates @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 голосов
/ 29 октября 2018

Поскольку имя вашего метода findNearbyGangs говорит о том, что он возвратит близлежащие банды (список сущностей банды), но вы возвращаете List<Long>, что является неправильным типом возврата для запроса.

Попробуйте вернутьList<Gang> вместо.

0 голосов
/ 28 октября 2018

Проблема, с которой вы столкнулись, заключается в том, что вы пытаетесь извлечь данные из вашего запроса в список Long, тогда как на самом деле вам нужен список Object.Это связано с тем, что вы выбираете более одного значения в строке (идентификатор и расстояние).Измените свой код на следующий, и он должен работать.

@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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...