JPQL은 위도와 경도로 가장 가까운 레코드를 얻습니다
문제
위도와 경도가있는 엔티티가 있으며 주어진 지점에 가장 가까운 것을 선택하고 싶습니다.
작동하는 것처럼 보이는이 예를 찾았습니다.
SELECT *,
SQRT(POW((69.1 * (locations.latitude - 27.950898)) , 2 ) +
POW((53 * (locations.longitude - -82.461517)), 2)) AS distance
FROM locations
ORDER BY distance ASC
LIMIT 5
그러나 기본 쿼리 대신 JPQL에서 쉽게 할 수있는 다른 조인 등이 있기 때문에 JPQL로 수행하는 것을 선호합니다.
이와 같은 것을 시도 할 때 JPA는 SQRT 토큰에 대해 불평하고 있습니다.
SELECT DISTINCT p, SQRT(....) AS distance, FROM Place p .... ORDER BY distance ASC
누구든지 이와 같은 쿼리를 작성하는 방법을 알고 있습니까? 아니면 또 다른 더 나은 접근 방식이 있습니까?
감사! /Oskar
해결책
내가 이것을 연구하고 알 수있는 한, 재판과 오류는 JPQL이 단순히이 시나리오를 처리 할 수있는 장비를 갖추지 못했습니다. 쿼리를 기본으로 다시 작성해야했습니다.
다른 팁
JPQL 언어 참조 그렇게 말합니다 :
functions_returning_numerics :: = abs (simple_arithmetic_expression) | sqrt (simple_arithmetic_expression) | mod (simple_arithmetic_expression, simple_arithmetic_expression) | 크기 (collection_valued_path_expression)
그래서 당신은 가지고 있지 않습니다 POW
.
기본 쿼리를 안전하게 사용할 수 있습니다.
그러나 내가 선호하는 접근법은 계산없이 쿼리를 만들고 코드에서 결과를 계산하는 것입니다. 큰 성능의 위험이되어서는 안됩니다.
제휴하지 않습니다 StackOverflow