JPQLは緯度と経度に基づいて最も近いレコードを取得します

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

  •  20-09-2019
  •  | 
  •  

質問

緯度と経度を持つエンティティがあり、指定された点に最も近いエンティティを選択したいと考えています。

うまくいきそうなこの例を見つけました

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

ただし、ネイティブクエリではなくJPQLで実行する方が簡単だと思われる他の結合などがたくさんあるため、JPQLで実行することを好みます。

このようなことを試みると、JPA は SQRT トークンについて苦情を言います。

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

このようなクエリの書き方、または別のより良いアプローチを知っている人はいますか?

ありがとう!/オスカー

役に立ちましたか?

解決

私の知る限り、これを研究してから伝えることができると試行錯誤JPQLは、単に、このシナリオを処理するために装備されていないこととして。私はネイティブのように私のクエリを書き換えなければなりませんでした。

他のヒント

JPQL 言語リファレンス こう言います:

functions_returning_numerics :: = ABS(simple_arithmetic_expression) |平方座標(simple_arithmetic_expression) |MOD(simple_arithmetic_expression, simple_arithmetic_expression) |サイズ(collection_valued_path_expression)

それで、あなたは持っていません POW.

ネイティブ クエリを安全に使用できます。

ただし、私が推奨するアプローチは、計算を行わずにクエリを作成し、その結果に対してコード内で計算を行うことです。パフォーマンスに大きな支障をきたすことはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top