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

4

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

根据我迄今为止所做的研究,Hibernate中没有直接支持此功能,因此Grails也不支持:

Grails / Hibernate:如何通过isnull(property)排序以获取最后的NULL?

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

基于这些,似乎我最好的选择是从 Hibernate 扩展 Order 类并自己添加 NULLS LAST 支持。 沿着这条路走,有人可以给我一个示例,并通过 Grails 公开吗? 我对直接使用 Hibernate 的经验非常少,因此所给出的示例难以理解。

或者:在 Oracle 中有没有一种方法可以通过某个列属性或类似物上的一些属性来指定表定义中的 NULLS LAST 排序?

2个回答

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

希望这可以帮助像我一样寻找答案的人。

0
继续Swapnil所说的话。如果您正在使用Criteria对象上的.list()调用,可以使用nulls键按如下格式进行格式化:
User.where {
  // filters here
}.list([
  max: 10, 
  offset: 0, 
  sort: 'email', 
  order: 'asc', 
  nulls: NullPrecedence.FIRST,
])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接