JPQL per ottenere registrazioni più vicine da latitudine e longitudine
Domanda
Sono avere entità con latitudine e longitudine e vorrei selezionare quelli più vicino a un dato punto.
Ho trovato questo esempio che si presenta come avrebbe funzionato
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
Ma io preferirei farlo con JPQL dal momento che ho un mucchio di altre unisce ecc che si sente più facile da fare in JPQL invece di interrogazione nativo.
Quando provo qualcosa di simile l'APP si lamenta il token SQRT.
SELECT DISTINCT p, SQRT(....) AS distance, FROM Place p .... ORDER BY distance ASC
Qualcuno ha sa come scrivere una query come questa, o forse un altro approccio migliore?
Grazie! / Oskar
Soluzione
Per quanto posso dire dalla ricerca di questo e può tentativi ed errori JPQL semplicemente non è in grado di gestire questo scenario. Ho dovuto riscrivere le mie domande come nativo.
Altri suggerimenti
Il JPQL lingua di riferimento dice che:
functions_returning_numerics :: = ABS (simple_arithmetic_expression) | SQRT (simple_arithmetic_expression) | MOD (simple_arithmetic_expression, simple_arithmetic_expression) | DIMENSIONE (collection_valued_path_expression)
Quindi, non c'è bisogno POW
.
È possibile utilizzare in modo sicuro una query nativo.
L'approccio che preferisco, però, è quello di rendere la query senza calcoli e poi fare il calcolo sul risultato nel codice. Non dovrebbe essere un pericolo per la grande prestazione.