JPQL pour obtenir les plus proches des dossiers par la latitude et la longitude

StackOverflow https://stackoverflow.com/questions/2064977

  •  20-09-2019
  •  | 
  •  

Question

Je suis avec les entités ont la latitude et la longitude et je voudrais choisir ceux qui le plus proche à un point donné.

Je trouve cet exemple qui ressemble à cela fonctionnerait

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

Mais je préférerais le faire avec JPQL depuis que j'ai un tas d'autres joint etc qui se sent plus facile à faire dans JPQL au lieu de requête native.

Lorsque je tente quelque chose comme ça l'Assemblée parlementaire paritaire se plaint du jeton RACINE.

SELECT DISTINCT p, SQRT(....) AS distance, FROM Place p .... ORDER BY distance ASC

Tout le monde a sait écrire une requête comme cela, ou peut-être une autre meilleure approche?

Merci! / Oskar

Était-ce utile?

La solution

Pour autant que je peux dire de recherches sur ce point et d'essai et les erreurs JPQL est tout simplement pas équipé pour gérer ce scénario. Je devais réécrire mes requêtes en natif.

Autres conseils

La langue JPQL référence dit que:

  

functions_returning_numerics :: = ABS (simple_arithmetic_expression) | RACINE (simple_arithmetic_expression) | MOD (simple_arithmetic_expression, simple_arithmetic_expression) | SIZE (collection_valued_path_expression)

Alors, vous n'avez pas POW.

Vous pouvez utiliser en toute sécurité une requête native.

L'approche que je préfère, cependant, est de faire la requête sans les calculs et ensuite faire le calcul sur le résultat dans votre code. Il ne devrait pas être un grand danger pour la performance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top