我有经度和纬度的实体,我想选择那些最接近给定点的那些。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
任何人都已经知道如何编写一个查询,或者也许另一个更好的办法?
谢谢! /奥斯卡
由于Oskar只需要2的幂就可以在没有POW的情况下进行查询,尽管它会是罗嗦的。奇怪的是,它抱怨SQRT。我会试验它。 – rayd09 2010-01-16 09:16:35
想想吧,你甚至不需要SQRT来做你想要的查询。您选择并按距离的平方排序,不要取平方根,直到得到一小组结果。无论您使用距离的平方还是距离本身,排序都是相同的。 – rayd09 2010-01-16 09:59:27
好主意,POW可以扩展,SQRT在比较中无关紧要。问题是,如果将它们放在FROM之前,我就无法进行任何计算。我不确定JPQL是如何工作的,如果可能的话。最坏的情况我想我必须回退到原生SQL。 – Oskar 2010-01-18 04:06:03