Здесь можно использовать HQL, а не собственный запрос. Например, вы можете создать простой класс результата:
class PlaceToDistancePair {
private Place place;
private double distance;
public PlaceToDistancePair(Place place, double distance) {
this.place = place;
this.distance = distance;
}
// getters and setters
}
, и тогда ваш @Query будет выглядеть примерно так:
@Query(
value = "SELECT new PlaceToDistancePair(p, DISTANCE(lat,lng,:myLat,:myLng)) FROM places p")
List<PlaceToDistancePair> placeToDistanceList;
Вы можете найти больше о select new
здесь , а также там вы найдете select new map
конструкцию, которая, возможно, также подойдет вам для отображения места на расстоянии без PlaceToDistancePair
класса.
Однако, в случае вашей функции (например, ST_Distance ) не зарегистрирован в спящем диалекте, необходимо зарегистрировать его самостоятельно. Проверьте здесь как Влад делает это в разделе «Регистрация функции SQL с помощью диалекта гибернации».
Также вы можете использовать API-интерфейс CriteriaBuilder, который гораздо более гибок , но требует больше кода. Читайте здесь , чтобы узнать больше