Только MySQL и несколько других баз данных позволяют использовать предложение HAVING
без GROUP BY
.Я предполагаю, что это здесь не разрешено, поэтому вы получаете ошибку.Один из обходных путей - просто повторить выражение расстояния в правильном предложении WHERE
, где эта проверка должна быть:
Select new com.geolocation.AddressVM(A,
6371 * acos( cos(radians(:lat)) * cos(radians(A.geoLocation.latitude)) *
cos( radians(A.geoLocation.longtitude) - radians(:lng) ) +
sin(radians(:lat)) * sin(radians(A.geoLocation.latitude)) )
) as distance
from #{#entityName} A
where
6371 * acos( cos(radians(:lat)) * cos(radians(A.geoLocation.latitude)) *
cos( radians(A.geoLocation.longtitude) - radians(:lng) ) +
sin(radians(:lat)) * sin(radians(A.geoLocation.latitude)) )
) > :distance
Другой обходной путь - подзапросить текущий запрос, а затем повторно использовать distance
псевдоним.Я не буду писать это полностью, но это будет выглядеть примерно так:
SELECT *
FROM
(
-- your current query
) t
WHERE t.distance > :distance
В этом случае мы можем использовать псевдоним distance
в предложении WHERE
, потому что он былматериализован как фактический столбец в подзапросе.