Grails/Hibernate:如何按isnull(属性)排序以最后获得null?
通常,当按字段升序排序时,首先得到空值,然后是更有趣的值。通常,您最后需要空值。在MySQL中,您可以通过以下方式执行此操作:Grails/Hibernate:如何按isnull(属性)排序以最后获得null?,hibernate,grails,null,criteria,Hibernate,Grails,Null,Criteria,通常,当按字段升序排序时,首先得到空值,然后是更有趣的值。通常,您最后需要空值。在MySQL中,您可以通过以下方式执行此操作: 按ISNULL(name)、name从人员订单中选择* 然而,我使用的是带有Hibernate标准的Grails,我完全不知道如何在那里做到这一点。这是否得到了任何支持?是否有某种方法可以按自定义SQL表达式排序?我不想为了让它正确排序而将所有标准重写为纯SQL。恐怕它还没有进入Hibernate:这有一个解决方案 不过,可以使用该bug注释中的NativeSQLOrd
按ISNULL(name)、name从人员订单中选择*代码>
然而,我使用的是带有Hibernate标准的Grails,我完全不知道如何在那里做到这一点。这是否得到了任何支持?是否有某种方法可以按自定义SQL表达式排序?我不想为了让它正确排序而将所有标准重写为纯SQL。恐怕它还没有进入Hibernate:这有一个解决方案
不过,可以使用该bug注释中的NativeSQLOrder
,并尝试向HibernateCriteriaBuilder
中注入适当的函数。您只需将sqlOrder
方法添加到HibernateCriteriaBuilder
类,其操作与在hibernate中执行的HibernateCriteriaBuilder.order()
大致相同,您可以使用以下代码进行尝试:
标准c=
c、 addOrder(Order.asc(“name”).nulls(nullpreference.LAST)) 如果您想在GORM中排序并HibernateCriteriaBuilder设置空优先级,AbstractHibernateCriteriaBuilder提供了一种方法,您可以像常规hibernate一样设置org.hibernate.criteria.order
范例
People.createCriteria().list (){
order(org.hibernate.criterion.Order.asc('name')
. nulls(org.hibernate.NullPrecedence.LAST)
)
}
看起来Hibernate的“bug”已经修复。我希望看到更新后的答案。grails标准也可以这样做。。def userCriteria=User.createCriteria()userCriteria.addOrder(Order.asc(FIRST_NAME).nulls(nullpreference.LAST));