2017-06-14 3 views
0

私はpostgresqlサーバーで春のデータを使用しており、いくつかのGPSデータ範囲のクエリを実行したいと思います。これは、座標が与えられた場合、エントリーから与えられた点までの距離をフライで計算し、特定の範囲を調べることを意味します。jpqlエイリアスキーワードによる複数の表現の使用

私は距離に関するデータを注文したいだけでなく、実際の距離も取得したいので、SQLではASキーワードを使用して式を1回だけ計算してから、この補助式をwhereと部品ごとの注文 しかし、これまでのところ、私はまだjqplでこれを行う方法を考え出していません。しかし、私は、各エントリに対して複数回評価されますので、これは、クエリの実行時間/応答時間にマイナスの影響を与えることになることを恐れている

SELECT NEW Result(p, <distance-expression>) FROM MyModel p where <distance-expression> <= :rangeParam order by <distance-expression> 

:だから私のクエリは、このような何かを行う必要があります。

複数の評価を避けるために、jqplにASキーワードを使用する方法はありますか
<distance-expression>

お礼

答えて

0

内部ビューのネイティブクエリは、ジョブを完了する必要があります。大円上の点間の距離を求めるclass Location(id, latitude, longitude)Haversine formulaを仮定すると、カスタムネイティブクエリでは、次のリポジトリメソッド宣言は十分であるべきである。例としてon Github入手可能

@Query(nativeQuery = true 
    , value = "SELECT " 
      + " r.id " 
      + " , r.latitude " 
      + " , r.longitude " 
      + "FROM " 
      + " (SELECT " 
      + " l.id   AS id " 
      + " , l.latitude AS latitude " 
      + " , l.longitude AS longitude " 
      + " , 2 * 6371 * ASIN(SQRT(POWER(SIN(RADIANS((l.latitude - ?1)/2)), 2) + COS(RADIANS(l.latitude))*COS(RADIANS(?1))*POWER(SIN(RADIANS((l.longitude - ?2)/2)), 2))) AS distance " 
      + " FROM " 
      + " location l) AS r " 
      + "WHERE " 
      + " r.distance < ?3") 
List<Location> findAllByProximity(BigDecimal latitude 
           , BigDecimal longitude 
           , BigDecimal distance); 

サンプル(メートル単位を想定します)。


:JPQLとは対照的に、例のネイティブクエリを使用しての背後にある理由は、JPQLで三角関数のサポートの欠如です。表現が簡単で、ネイティブのJPQL関数を使用してコード化できる場合、ネイティブ・クエリーをJPAクエリーに置き換えることができます。

関連する問題