Добавить регулярное выражение в порядке по предложению в построителе критериев - PullRequest
2 голосов
/ 17 февраля 2020

Мы работаем над проектом весенней загрузки, в котором сортировка по номеру столбца может применяться в порядке возрастания и убывания.

Мы используем построитель критериев для генерации запроса. Вот код заказа по запросу для сортировки:

List<Order> orderBy = new ArrayList<>();
queryContext.getSorts().forEach(sort -> {
     if (sort.getDirection().equals(SortDirection.asc)) {
         orderBy.add(builder.asc(getReference(root, sort.getColumnName())));
     } else {
         orderBy.add(builder.desc(getReference(root, sort.getColumnName())));
     }
});

Это работало нормально со строкой. Но это не работает для одного столбца строкового типа, но будет содержать значения с плавающей запятой, числа с десятичными или без них.

Приведенный ниже код запроса отлично работает для столбца строкового типа, который будет содержать значения с плавающей запятой, числа с десятичным знаком или без него.

orderByClauses.append("regexp_substr(regexp_replace(attribNum, '^\\.', '0.'), '^\\D*') ");
orderByClauses.append(s.getDirection().toString());
orderByClauses.append(" nulls first,");
orderByClauses.append("to_number(regexp_substr(regexp_replace(attribNum, '^\\.', '0.'), '\\d+\\.?\\d*')) ");

Как добавить эти выражения в построитель критериев?

...