문제

위도와 경도가있는 엔티티가 있으며 주어진 지점에 가장 가까운 것을 선택하고 싶습니다.

작동하는 것처럼 보이는이 예를 찾았습니다.

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.

기본 쿼리를 안전하게 사용할 수 있습니다.

그러나 내가 선호하는 접근법은 계산없이 쿼리를 만들고 코드에서 결과를 계산하는 것입니다. 큰 성능의 위험이되어서는 안됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top