Я использую Hibernate в приложении storefinder. Для поиска близости в SQL я использую формулу haversine. Поскольку это немного беспорядочный SQL, я создал именованный запрос SQL в моем файле .hbm.xml для этого.Комбинировать NamedQuery и критерии в спящем режиме
SELECT
location.*,
(3959 * acos(cos(radians(7.4481481)) *
cos(radians(X(location.coordinates))) *
cos(radians(Y(location.coordinates)) - radians(46.9479986)) +
sin(radians(7.4481481)) * sin(radians(X(location.coordinates)))))
AS distance
FROM
location
WHERE
location.coordinates IS NOT NULL
HAVING
distance < :radius
ORDER BY
distance ASC
LIMIT :max
Но у меня также есть пользовательский фильтр (часы работы, ассортимент и т. Д.). Для этого я использую критерии Hibernate для программного добавления фильтров.
Теперь у меня есть отлично работающий NamedQuery, который дает мне все местоположения вокруг определенной точки и совершенно рабочий критерий запроса, дающий мне все местоположения в соответствии с каким-то фильтром.
Мой вопрос: что является лучшим способом в Hibernate объединить этих двух зверей? (т. е. мне нужны все местоположения вокруг определенной точки, удовлетворяющие некоторым фильтрам.) Есть ли, например, любой способ использовать NamedQuery в качестве подзапроса в поиске критериев?
Или можно выразить поиск по близости с использованием критериев? Я мог бы, конечно, жить с этим. Я просто не знаю, как это сделать (т. Е. Как сделать эквивалент добавления выражения формулы haversine в предложение SELECT, а затем ссылаться на него в HAVING с критериями). – apropoz