JPQL para obter registros mais próximos por latitude e longitude
Pergunta
Tenho entidades com latitude e longitude e gostaria de selecionar as mais próximas a um determinado ponto.
Eu encontrei este exemplo que parece que funcionaria
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
Mas eu preferiria fazê -lo com o JPQL, já que tenho um monte de outras junções, etc, que parecem mais fáceis de fazer no JPQL em vez de consulta nativa.
Quando tento algo assim, o JPA está reclamando do token SQRT.
SELECT DISTINCT p, SQRT(....) AS distance, FROM Place p .... ORDER BY distance ASC
Alguém sabe como escrever uma consulta como essa, ou talvez outra abordagem melhor?
Obrigado! /Oskar
Solução
Tanto quanto posso dizer ao pesquisar isso, e maio tentativa e erros JPQL simplesmente não está equipado para lidar com esse cenário. Eu tive que reescrever minhas perguntas como nativas.
Outras dicas
A referência da linguagem JPQL diz que:
funções_returning_numerics :: = abs (simples_arithmetic_expression) | Sqrt (simples_arithmetic_expression) | Mod (simples_arithmetic_expression, simples_arithmetic_expression) | Tamanho (colecionamento_valued_path_expression)
Então, você não tem POW
.
Você pode usar com segurança uma consulta nativa.
A abordagem que eu preferiria, no entanto, é fazer a consulta sem os cálculos e, em seguida, fazer o cálculo do resultado no seu código. Não deve ser um grande perigo de desempenho.