HQL 'parsename' equivalente
-
10-07-2019 - |
Pregunta
He descubierto la función PARSENAME como una buena opción para ordenar la dirección IP almacenada en la base de datos. Aquí hay un ejemplo.
Mi problema es que estoy usando Hibernate con consultas con nombre en un archivo de mapeo xml y estoy tratando de evitar el uso de
session.createSQLQuery(..)
función.
Me pregunto si existe alguna función equivalente de PARSENAME para consultas HQL. Lo estoy buscando y no puedo encontrar nada.
Muchas gracias.
Solución
No encontré nada relacionado.
Finalmente ejecuté la siguiente cláusula ORDER BY para ordenar las direcciones IP de forma numérica (encontré la solución aquí ):
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)
Otros consejos
Subclasifique su dialecto y use RegisterFunction ()
para que PARSENAME esté disponible para consultas HQL. RegisterFunction
no está muy bien documentado, pero hay muchos ejemplos en la web . Sin embargo, no estoy seguro de que pueda usarlo para ordenar los resultados.