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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top