半正矢公式
SELECT
id,
(3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng)
- radians(-122)) + sin(radians(37)) * sin(radians(lat)))) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance LIMIT 0 , 20
我尝试使用 Hibernate 编写:
String query = "SELECT *, ( 3959 * acos( cos( radians(?) ) * cos( radians( Vehicle.lat ) ) * cos( radians( Vehicle.lng ) - radians(-?) ) + sin( radians(37) ) * sin( radians( Vehicle.lat ) ) ) ) AS distance FROM VehicleDetails Vehicle HAVING distance < 25 ORDER BY distance LIMIT 0 , 20";
Object[] params = {lat,lng};
List<VehicleDetails> vehicledata = getHibernateTemplate().find(query,params);
Exception: org.hibernate.hql.ast.QuerySyntaxException:
最佳答案
如果没有group by
子句,则不需要having
子句,可以使用where
。我相信错误是由于第一个选择中的 * 引起的,您可能需要重写为
SELECT Vehicle.*, ( 3959 * acos( cos( radians(?) ) * cos( radians( Vehicle.lat ) ) * cos( radians( Vehicle.lng ) - radians(-?) ) + sin( radians(37) ) * sin( radians( Vehicle.lat ) ) ) ) AS distance FROM VehicleDetails Vehicle where distance < 25 ORDER BY distance LIMIT 0 , 20"
关于java - Hibernate 中的半正矢公式 - Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29776452/