Я использую Hibernate в приложении storefinder.
Для поиска близости в SQL я использую формулу haversine. Поскольку это немного грязный SQL, для этого я создал именованный запрос SQL в своем файле .hbm.xml.
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 в качестве подзапроса при поиске по критерию?