我正在使用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排序,通过列上的某些属性等?
答案 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));
}
希望这可以帮助像我这样的人。