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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top