使用createCriteria在排序列表的最后排序Nulls

时间:2015-02-24 09:07:07

标签: hibernate grails gorm

我在排序具有空值的列表时遇到问题!

我需要的是在订购时,空值出现在列表的最后一个位置!因为现在看来Null在订购时位于我的列表顶部!

我无法使用NullPrecedence,因为hibernate版本是3.6.x

我的代码示例!

SomeClass.createCriteria().list {
  eq('sth', sth)
  if (sort == 'someValue') {
    createAlias("nestedClass1", "nc1", CriteriaSpecification.LEFT_JOIN)
    createAlias("nc1.nestedClass2", "nc2", CriteriaSpecification.LEFT_JOIN)
    createAlias("nc2.nestedClass3", "nc3", CriteriaSpecification.LEFT_JOIN)
    order("nc3.name", sortOrder)
  }
}

1 个答案:

答案 0 :(得分:2)

您可以在域类中添加新字段,并使用映射到公式来检查它是否为空,然后按此额外字段排序:

class SomeClass {
    String name
    boolean nameNotNull

    static mapping = {
        nameNotNull formula: 'name is not null'
    }
}



SomeClass.createCriteria().list() {
    order ('nameNotNull', 'desc')
    order ('name', 'asc')
}