JPQL按纬度和经度获取最近的记录

时间:2010-01-14 15:03:30

标签: java jpa jpql

我有经纬度的实体,我想选择离给定点最近的实体。

我发现这个看起来会起作用的例子

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

任何人都知道如何编写这样的查询,或者可能是另一种更好的方法?

谢谢! /奥斯卡

2 个答案:

答案 0 :(得分:1)

据我所知,研究这个可能是试验和错误,JPQL根本无法处理这种情况。我必须将我的查询重写为本机查询。

答案 1 :(得分:0)

The JPQL language reference说:

  

functions_returning_numerics :: = ABS(simple_arithmetic_expression)| SQRT(simple_arithmetic_expression)| MOD(simple_arithmetic_expression,simple_arithmetic_expression)| SIZE(collection_valued_pa​​th_expression)

所以,你没有POW

您可以安全地使用原生查询。

但我更喜欢的方法是在没有计算的情况下进行查询,然后在代码中对结果进行计算。它不应该是一个很大的性能危险。