Эквивалент HQL 'parsename'
-
10-07-2019 - |
Вопрос
Я обнаружил, что функция PARSENAME является хорошим выбором для упорядочивания IP-адреса, хранящегося в базе данных. Здесь вот такой пример.
Моя проблема в том, что я использую Hibernate с именованными запросами в файле сопоставления xml, и я пытаюсь избежать использования
session.createSQLQuery(..)
функция.
Мне интересно, существует ли какая-либо эквивалентная функция PARSENAME для запросов HQL.Я ищу это и ничего не могу найти.
Большое спасибо.
Решение
Я не нашел ничего связанного.
Наконец, я выполнил следующее предложение ORDER BY, чтобы упорядочить IP-адреса числовым способом (я нашел решение здесь):
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)
Другие советы
Разделите свой диалект на подклассы и используйте RegisterFunction()
чтобы сделать PARSENAME доступным для запросов HQL. RegisterFunction
не очень хорошо документировано, но есть множество примеров в Интернете.Я не уверен, что вы можете использовать это, чтобы порядок однако результаты.