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

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

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

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

3 ответа

Если вы хотите заказать и 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)
           )
     }

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

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

В спящем режиме вы можете попробовать этот код ниже:

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

c.addOrder (Order.asc ("имя") обнуляет (NullPrecedence.LAST).);

Другие вопросы по тегам