Объедините NamedQuery и Критерии в Hibernate
Я использую 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 в качестве подзапроса при поиске критериев?
1 ответ
Как лучше всего сочетать этих двух зверей в Hibernate?
Насколько мне известно, это невозможно. Так что либо напишите все, используя запрос Criteria (я лично не знаю, как сделать то, что вы просите), либо вычислите динамическую строку HQL.