Спящий режим и порядок с использованием значений столбцов - PullRequest
1 голос
/ 18 декабря 2009

Есть ли способ, которым я могу выполнить приведенный ниже запрос (порядок за которым следует подобное), используя критерии гибернации api?

select * from table where first_name like 'bar%' order by first_name like 'bar%' desc

Ответы [ 4 ]

3 голосов
/ 18 декабря 2009

Вы не можете легко сопоставить этот запрос с Criteria API, потому что Order класс поддерживает только имена / псевдонимы свойств, а не выражения.

Однако вы можете попробовать одно из следующих действий:

  1. Если базовая база данных поддерживает выражение, которое вы пытаетесь упорядочить в условии SELECT, вы можете определить Проекция с некоторыми псевдонимами (в зависимости от выражения, которое вам, возможно, придется использовать Projections.sqlProjection(), чтобы сделать это), а затем заказать по этому псевдониму.

  2. В противном случае вы можете расширить класс Order и перезаписать его метод toSqlString(), чтобы генерировать SQL по своему усмотрению. Будьте осторожны, чтобы не сделать его непереносимым для разных баз данных.

P.S. Чтобы ответить на некоторые из приведенных выше комментариев, я почти уверен, что ORDER BY expression является стандартом ANSI SQL (хотя не могу быть уверен на 100%, учитывая, что он не является общедоступным). Это, безусловно, стандарт де-факто - он поддерживается последними версиями MySQL / PostgreSQL / Oracle / SQL Server.

0 голосов
/ 30 мая 2015

Вы можете сделать следующий трюк:

cachedCriteria.add(Restrictions.sqlRestriction("1=1 order by " + your_expression_here);

sqlRestriction работает следующим образом - добавляет AND в конец запроса и вставляет ваше выражение.

0 голосов
/ 19 декабря 2009

это можно сделать с помощью метода addOrder API критериев:

List<Customer> result=(List<Customer>) session.createCriteria(Customer.class)
                           .add(Restrictions.like("firstName", "bar%"))
                           .addOrder(Order.desc("firstName"))
                           .list();

проверьте здесь:

Критерии гибернации Api

0 голосов
/ 18 декабря 2009

Я полагаю, вы просто ищете order by first_name desc ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...