2010-10-07 4 views
2

Я использую 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 в качестве подзапроса в поиске критериев?

+0

Или можно выразить поиск по близости с использованием критериев? Я мог бы, конечно, жить с этим. Я просто не знаю, как это сделать (т. Е. Как сделать эквивалент добавления выражения формулы haversine в предложение SELECT, а затем ссылаться на него в HAVING с критериями). – apropoz

ответ

1

Что является лучшим способом в Hibernate объединить этих двух зверей?

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

+0

Я надеялся, что смогу избежать динамического построения строк. Но я думаю, что другого выбора нет. Было бы здорово, если бы спячка поддержала это в будущем! – apropoz

Смежные вопросы