【发布时间】:2010-11-10 12:22:38
【问题描述】:
我目前有以下标准:-
Criteria addr = criteria.createCriteria("location.address");
addr.add((Restrictions.and(Restrictions.between("latitude", latmin,
latmax), Restrictions.between("longitude", truelongmin, truelongmax))));
String sql = "SQRT( POW( 69.1 * ( {alias}.latitude - " + point[1]
+" ) , 2 ) + POW( 69.1 * ( "+point[0] +" - {alias}.longitude ) * COS( {alias}.latitude /"
+" 57.3 ) , 2 ) ) < "+distance;
addr.add(Restrictions.sqlRestriction(sql));
理想情况下,我想做的是能够按距离订购。 mySQL 等价物是:-
SELECT * , (
SQRT( POW( 69.1 * ( latitude - 51.3814282 ) , 2 ) + POW( 69.1 * ( - 2.3574537 - longitude ) * COS( latitude / 57.3 ) , 2 ) )
) AS distance
FROM `address`
WHERE (
SQRT( POW( 69.1 * ( latitude - 51.3814282 ) , 2 ) + POW( 69.1 * ( - 2.3574537 - longitude ) * COS( latitude / 57.3 ) , 2 ) )
) < 10.0
ORDER BY distance DESC
LIMIT 0 , 30
在 Hibernate 中执行此操作的最佳方法是什么?我试过 createCriteria / createAlias ("distance","function")
理想情况下,我想发布对 Latmin 和 Latmax 的限制,因为这会降低结果集,从而降低计算次数(sql 也会进行两次相同的计算:S),但是任何建议都将不胜感激。
干杯, 抢
【问题讨论】: