【问题标题】:how to apply NULLS LAST sorting in Grails/GORM如何在 Grails/GORM 中应用 NULLS LAST 排序
【发布时间】:2014-07-30 01:43:13
【问题描述】:

我正在使用 Grails DetachedCriteria 查询,并且需要在降序排序时获取最后排序的空值。这是针对 Oracle 数据库的。

根据我目前所做的研究,Hibernate 没有直接支持这一点,因此在 Grails 中也不支持:

Grails/Hibernate: how to order by isnull(property) to get NULLs last?

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

基于这些,似乎我最好的选择是从 Hibernate 扩展 Order 类并自己添加 NULLS LAST 支持。沿着这条路走,谁能给我一个如何通过 Grails 公开的例子?我对直接 Hibernate 的经验很少,所以给出的例子很难理解。

或者:Oracle 中是否有任何方法可以通过列上的某些属性等在表定义中指定 NULLS LAST 排序?

【问题讨论】:

    标签: oracle hibernate grails grails-orm


    【解决方案1】:

    以下是 grails 标准中的一个示例,通过覆盖 hibernate addOrder 方法最终对 Null 进行排序

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

    希望这可以帮助像我一样搜索的人。

    【讨论】:

      猜你喜欢
      • 2017-11-02
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      相关资源
      最近更新 更多