Grails / Hibernate: как упорядочить по isnull (свойство), чтобы получить последние значения NULL? - PullRequest
6 голосов
/ 26 апреля 2011

Обычно при упорядочении по возрастанию по полю сначала вы получаете значения NULL, а затем более интересные значения. Часто вы хотите, чтобы значения NULL были последними. В MySQL вы можете сделать это с помощью:

SELECT * FROM people ORDER BY ISNULL(name), name;

Однако я использую Grails с критериями Hibernate, и я совершенно не знаю, как это сделать. Это хоть как-то поддерживается? Есть ли способ упорядочить по пользовательскому выражению SQL? Я бы не хотел переписывать все мои критерии на простой SQL, чтобы заставить его правильно сортировать.

Ответы [ 3 ]

5 голосов
/ 08 января 2016

, если вы хотите заказать, и HibernateCriteriaBuilder для установки NullPrecedence в GORM AbstractHibernateCriteriaBuilder предоставляет вамметод order () , который можно установить org.hibernate.criterion.Order как обычный Hibernate

Пример

     People.createCriteria().list (){
          order(org.hibernate.criterion.Order.asc('name')
                . nulls(org.hibernate.NullPrecedence.LAST)
           )
     }
2 голосов
/ 06 мая 2015

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

Критерии c = ...;

c.addOrder (Order.asc ("name"). Nulls (NullPrecedence.LAST));

2 голосов
/ 26 апреля 2011

Боюсь, что это даже не в Hibernate: есть открытая ошибка для этого.

Тем не менее, можно использовать NativeSQLOrder из комментариев к этой ошибке и попытаться вставить правильную функцию в HibernateCriteriaBuilder. Вам нужно только добавить метод sqlOrder в класс HibernateCriteriaBuilder, делая примерно так же, как HibernateCriteriaBuilder.order().

...