Equivalente "parsename" di HQL
-
10-07-2019 - |
Domanda
Ho scoperto la funzione PARSENAME come una buona scelta per ordinare l'indirizzo IP memorizzato nel database. Qui c'è un esempio.
Il mio problema è che sto utilizzando Hibernate con query denominate in un file di mapping xml e sto cercando di evitare l'uso di
session.createSQLQuery(..)
funzione.
Mi chiedo se esiste una funzione equivalente PARSENAME per le query HQL. Lo sto cercando e non riesco a trovare nulla.
Mille grazie.
Soluzione
Non ho trovato nulla di correlato.
Alla fine ho eseguito la seguente clausola ORDER BY per ordinare gli indirizzi IP in modo numerico (ho trovato la soluzione qui ):
order by cast(substring(host.ip, 1, locate('.', host.ip) - 1) as integer),
cast(substring(host.ip, locate('.', host.ip) + 1, locate('.', host.ip, locate('.', host.ip) + 1) - locate('.', host.ip) - 1) as integer),
cast(substring(host.ip, locate('.', host.ip, locate('.', host.ip) + 1) + 1, locate('.', host.ip, locate('.', host.ip, locate('.', host.ip) + 1) + 1) - locate('.', host.ip, locate('.', host.ip) + 1) - 1) as integer),
cast(substring(host.ip, locate('.', host.ip, locate('.', host.ip, locate('.', host.ip) + 1) + 1) + 1, 3) as integer)
Altri suggerimenti
Sottoclassa il dialetto e usa RegisterFunction ()
per rendere PARSENAME disponibile per le query HQL. RegisterFunction
non è ben documentato ma ci sono molti esempi sul web . Non sono sicuro che puoi usarlo per ordinare i risultati.