Как применить сортировку NULLS LAST в Grails/GORM

Я использую запрос Grails DetachedCriteria, и мне нужно получить нулевые значения, упорядоченные последними при сортировке по убыванию. Это против базы данных Oracle.

Основываясь на исследовании, которое я провел до сих пор, в Hibernate нет прямой поддержки, а следовательно, и в Grails:

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

а также

https://hibernate.atlassian.net/browse/HHH-2381

Исходя из этого, мне кажется, что мой лучший вариант - расширить класс Order из Hibernate и добавить поддержку NULLS LAST самостоятельно. Следуя этому пути, может ли кто-нибудь дать мне пример того, как это будет раскрыто через Грааля? У меня очень мало опыта работы с Hibernate, поэтому приведенные примеры довольно сложны для подражания.

Альтернативно: есть ли способ в Oracle, чтобы указать сортировку NULLS LAST в определении таблицы, через какое-либо свойство в столбце или тому подобное?

2 ответа

Ниже приведен пример в критериях Grails для сортировки Nulls в конце путем переопределения hibernate addOrder.

def userCriteria = User.createCriteria()
List results = userCriteria.list(max:limit, offset:offset) {
    eq("isActive", true)
    ilike("firstName",text+"%")
    userCriteria.addOrder(Order.asc("firstName").nulls(NullPrecedence.LAST));
}

Вы даже можете иметь это в or блок. например.

or{
    userCriteria.addOrder(Order.asc(USERNAME).nulls(NullPrecedence.LAST));
    userCriteria.addOrder(Order.asc(EMAIL).nulls(NullPrecedence.LAST));
    userCriteria.addOrder(Order.asc(FIRST_NAME).nulls(NullPrecedence.LAST));
    userCriteria.addOrder(Order.asc(LAST_NAME).nulls(NullPrecedence.LAST));
}

Надеюсь, это поможет кому-то, кто ищет меня.

Добавление к тому, что говорил Swapnil. Если вы используете.list()вызов объекта Criteria, вы можете отформатировать его следующим образом, используяnullsключ:

      User.where {
  // filters here
}.list([
  max: 10, 
  offset: 0, 
  sort: 'email', 
  order: 'asc', 
  nulls: NullPrecedence.FIRST,
])
Другие вопросы по тегам