如何在Grails / GORM中应用NULLS LAST排序

时间:2014-06-09 13:44:22

标签: oracle hibernate grails gorm

我正在使用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排序,通过列上的某些属性等?

1 个答案:

答案 0 :(得分:4)

以下是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));
}

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