1
我目前有以下標準: -Hibernate的標準 - 順序按
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(「距離」,「功能」)
理想情況下,我想這樣做後張對Latmin和Latmax的限制,因爲這降低了結果集,從而計算的數量(也是SQL相同的計算兩次:S),但任何建議將不勝感激。
乾杯, 羅布