我有经纬度的实体,我想选择离给定点最近的实体。
我发现这个看起来会起作用的例子
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
任何人都知道如何编写这样的查询,或者可能是另一种更好的方法?
谢谢! /奥斯卡
答案 0 :(得分:1)
据我所知,研究这个可能是试验和错误,JPQL根本无法处理这种情况。我必须将我的查询重写为本机查询。
答案 1 :(得分:0)
functions_returning_numerics :: = ABS(simple_arithmetic_expression)| SQRT(simple_arithmetic_expression)| MOD(simple_arithmetic_expression,simple_arithmetic_expression)| SIZE(collection_valued_path_expression)
所以,你没有POW
。
您可以安全地使用原生查询。
但我更喜欢的方法是在没有计算的情况下进行查询,然后在代码中对结果进行计算。它不应该是一个很大的性能危险。