【问题标题】:Ordering Nulls at the last of sorted list using createCriteria使用 createCriteria 在排序列表的最后一个排序空值
【发布时间】:2015-02-24 09:07:07
【问题描述】:

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

我需要的是在订购时空值出现在列表的最后!现在看来,在订购时,Null 是我的首选!

我无法使用 NullPrecedence,因为休眠版本是 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)
  }
}

【问题讨论】:

  • 你试过nulls first/last吗? stackoverflow.com/questions/3683174/…
  • 如何在我的代码中使用它?
  • "$sortOrder nulls last";但可能取决于您的实际数据库
  • 我试过了,但现在空值总是首先出现!也尝试过“$sortOrder nulls first”!还是一样!

标签: hibernate grails grails-orm


【解决方案1】:

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

class SomeClass {
    String name
    boolean nameNotNull

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



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

【讨论】:

  • 实际上类名不能为空!但我使用这个类作为嵌套对象(属性)并且这个属性(对象)可能是 null
猜你喜欢
  • 2010-12-02
  • 2011-09-25
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2011-09-21
相关资源
最近更新 更多