1

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

我发现这个例子看起来可行

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

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

谢谢!/奥斯卡

4

2 回答 2

1

据我从研究中得知,可能会反复试验,JPQL 根本无法处理这种情况。我不得不将我的查询重写为原生的。

于 2010-01-19T13:31:51.133 回答
0

JPQL 语言参考说:

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

所以,你没有POW.

您可以安全地使用本机查询。

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

于 2010-01-14T21:40:00.197 回答