HQL 'ParseName' equivalente
-
10-07-2019 - |
Pergunta
Eu descobri função ParseName como uma boa escolha para o endereço IP a fim armazenados em banco de dados. Aqui há um exemplo.
Meu problema é que eu estou usando Hibernate com consultas nomeadas em um arquivo de mapeamento xml e eu estou tentando evitar o uso de
session.createSQLQuery(..)
função.
Eu estou querendo saber se existe qualquer função equivalente ParseName para consultas HQL. Eu estou procurando por ele e não consigo encontrar nada.
Muito obrigado.
Solução
Eu não encontrei nada relacionado.
Finalmente eu executada a seguinte cláusula ORDER BY para ordenar os endereços IP em forma numérica (Eu encontrei a solução aqui ):
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)
Outras dicas
subclasse seu dialeto e uso RegisterFunction()
fazer ParseName disponível para consultas HQL. RegisterFunction
não está muito bem documentado, mas existem muitos exemplos na web . Eu não estou certo que você pode usá-lo para fim Resultados embora.