В настоящее время у меня есть следующие критерии: -
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), однако любые предложения будут наиболее цениться.
Cheers,
Rob