Объединить NamedQuery и критерии в гибернации
-
28-09-2019 - |
Вопрос
Я использую 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.