Как я могу упорядочить по целому числу в строке в CriteriaBuilder Spring JPA?

#spring #sorting #jpa #spring-data-jpa #spring-data-commons

#весна #сортировка #jpa #spring-data-jpa #spring-data-commons

Вопрос:

Мои данные состоят из строк, которые могут быть числами или строками («12» следует рассматривать как число, а «12REF» следует рассматривать как строку).

Я хочу реализовать order by в моем CriteriaBuilder, который сначала сортирует строки по номерам, а в конце помещает строки, отсортированные в алфавитном порядке.

Правильно отсортированный пример: <[[«1», «2», «10», » A», «AB», «B», «DUP», «LNE», «NUL»]]>

В настоящее время мой код выглядит следующим образом (просто сортировка по asc, используя OrderBy CriteriaQuery).

 .orderBy(QueryUtils.toOrders(
                            Sort.by(Sort.Direction.ASC, selection.getAlias()), root,
                            criteriaBuilder)
                            );
 

что приводит к:
<[[«1», «10», «2», » A», «AB», «B», «DUP», «LNE», «NUL»]]>

Как я могу реализовать пользовательский порядок здесь?

Редактировать: данные хранятся в базе данных MySQL

Комментарии:

1. Какая база данных? Скорее всего, вам потребуется использовать функцию, зависящую от базы данных, чтобы определить, является ли строка числом или нет

2. О, прошу прощения, это MySQL

3. Является ли результирующий набор большим? Используете ли вы подкачку? Если «нет» для обоих, то будет намного проще сортировать результаты в памяти после выборки. Кажется, довольно сложно сделать это с помощью Criteria API. Но в любом случае вы должны начать с написания чистого запроса MySQL, который создает желаемый порядок, а затем попытаться перевести его в Criteria API с помощью criteriaBuilder.function(...)