В настоящее время JPA не имеет API для replace () и cast (строка в виде числа). Но вы можете использовать CriteriaBuilder.function (...) для создания собственных функций базы данных, если переносимость базы данных не критична.
Для MySQL выражение порядка в вашем примере будет:
Expression<String> replacedValue = criteriaBuilder.function("replace",
String.class, root.get("version"), criteriaBuilder.literal("."),
criteriaBuilder.literal(""));
Expression<String> lpadValue = criteriaBuilder.function("lpad",
String.class, replacedValue, criteriaBuilder.literal(20),
criteriaBuilder.literal("0"));
criteriaQuery.orderBy(criteriaBuilder.desc(lpadValue));
Функция CriteriaBuilder.function (...) не поддерживает такие встроенные функции, как cast(value as type) or convert(value, type)
. Поэтому используйте lpad (...) для достижения того же порядка по результатам.
Отлично работает с Cmobilecom JPA , легковесной реализацией JPA для Java и Android.
Отказ от ответственности: я являюсь разработчиком Cmobilecom JPA.