Объедините 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.

Другие вопросы по тегам