Combinare NamedQuery e criteri di Hibernate
-
28-09-2019 - |
Domanda
Io uso Hibernate in un'applicazione Storefinder. Per la ricerca di prossimità in SQL Io uso la formula haversine. Perché questo è un po 'disordinato SQL ho creato una query SQL di nome nel mio file .hbm.xml per questo.
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
Ma anche avere un filtro definito dall'utente (orari di apertura, assortimenti, ecc). Per questo io uso i criteri di Hibernate per aggiungere programatically filtri.
Ora ho un NamedQuery perfettamente funzionante dandomi tutte le località in tutto un certo punto e un criterio perfettamente funzionanti mi interrogare dando tutte le sedi secondo alcuni filtri.
La mia domanda è: Qual è il modo migliore in Hibernate di combinare queste due bestie? (Vale a dire ho bisogno di tutte le località in tutto un certo punto che soddisfano alcuni filtri.) C'è ad esempio un modo per utilizzare un NamedQuery come sottoquery in un criterio di ricerca?
Soluzione
Qual è il modo migliore in Hibernate di combinare queste due bestie?
A mia conoscenza, che non è possibile. Quindi, o tutto in scrittura utilizzando una query Criteria (io personalmente non so come fare quello che stai chiedendo) oppure calcolare una stringa di dinamica HQL.