Вопрос

Я использую Hibernate в приложении Stearchfinder. Для поиска близости в SQL я использую формулу Гаверина. Поскольку это немного грязный 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

Но у меня также есть пользовательский фильтр (часы работы, ассортименты и т. Д.). Для этого я использую критерии гибернации для программически добавления фильтров.

Теперь у меня есть идеально работающий NamedQuery, давая мне все места вокруг определенного момента, а также идеально работающие критерии, которые дают мне все места в соответствии с некоторым фильтром.

Мой вопрос: какой лучший способ в гибернации сочетать те два зверей? (т.е. мне нужны все места вокруг определенного момента, удовлетворяющего некоторое фильтр.) Есть ли например, любой способ использовать NamedQuery, как подзапрос в поисках критериев?

Это было полезно?

Решение

Каково лучший путь в гибернации, чтобы объединить эти два зверей?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top