J'ai actuellement les critères ci-dessous: -Critères Hibernate - voir
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));
Ce que je voudrais faire est idéalement pour pouvoir commander par la distance. L'être équivalent 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
Quelle est la meilleure façon de le faire en veille prolongée? J'ai essayé createCriteria/createAlias ("distance", "fonction")
Idéalement, je voudrais faire cela après la restriction sur Latmin et Latmax car cela diminue le jeu de résultats et donc le nombre de calculs (aussi le sql fait le même calcul deux fois: S) cependant toute suggestion serait la plus appréciée.
Cheers, Rob