Объедините NamedQuery и Критерии в Hibernate - PullRequest
2 голосов
/ 07 октября 2010

Я использую 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 Ответ

1 голос
/ 07 октября 2010

Как лучше всего сочетать этих двух зверей в Hibernate?

Насколько мне известно, это невозможно. Поэтому либо напишите все, используя запрос Criteria (я лично не знаю, как сделать то, что вы просите), либо вычислите динамическую строку HQL.

...