Вы не можете легко сопоставить этот запрос с Criteria API, потому что Order
класс поддерживает только имена / псевдонимы свойств, а не выражения.
Однако вы можете попробовать одно из следующих действий:
Если базовая база данных поддерживает выражение, которое вы пытаетесь упорядочить в условии SELECT
, вы можете определить Проекция с некоторыми псевдонимами (в зависимости от выражения, которое вам, возможно, придется использовать Projections.sqlProjection()
, чтобы сделать это), а затем заказать по этому псевдониму.
В противном случае вы можете расширить класс Order
и перезаписать его метод toSqlString()
, чтобы генерировать SQL по своему усмотрению. Будьте осторожны, чтобы не сделать его непереносимым для разных баз данных.
P.S. Чтобы ответить на некоторые из приведенных выше комментариев, я почти уверен, что ORDER BY expression
является стандартом ANSI SQL (хотя не могу быть уверен на 100%, учитывая, что он не является общедоступным). Это, безусловно, стандарт де-факто - он поддерживается последними версиями MySQL / PostgreSQL / Oracle / SQL Server.