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).);