J'utilise Hibernate dans une application de magasinage. Pour la recherche de proximité en SQL, j'utilise la formule haversine. Parce que c'est un peu compliqué SQL j'ai créé une requête SQL nommée dans mon fichier .hbm.xml pour cela.Combiner NamedQuery et les critères dans Hibernate
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
Mais j'ai aussi un filtre défini par l'utilisateur (heures d'ouverture, assortiments, etc.). Pour cela, j'utilise les critères Hibernate pour ajouter des filtres par programmation.
Maintenant, j'ai un NamedQuery fonctionnant parfaitement qui me donne tous les emplacements autour d'un certain point et une requête de critères fonctionnant parfaitement me donnant tous les emplacements selon un filtre.
Ma question est: Quelle est la meilleure façon pour Hibernate de combiner ces deux bêtes? (c'est-à-dire que j'ai besoin que tous les emplacements autour d'un certain point satisfassent un filtre.) Existe-t-il par exemple un moyen quelconque d'utiliser une requête Named comme sous-requête dans une recherche de critères?
Ou est-il possible d'exprimer la recherche de proximité en utilisant des critères? Je pourrais bien sûr vivre avec ça. Je ne sais pas comment le faire (c'est-à-dire comment faire l'équivalent de l'ajout de l'expression de la formule haversine à la clause SELECT, puis de s'y référer dans le HAVING with Criteria). – apropoz