Grails / Hibernate:如何通过isnull(property)命令最后得到NULL?

时间:2011-04-26 08:35:36

标签: hibernate grails null criteria

通常,当按字段升序排序时,首先获得NULL值,然后获得更有趣的值。通常,您最后需要NULL值。在MySQL中,您可以通过以下方式执行此操作:

SELECT * FROM people ORDER BY ISNULL(name), name;

但是,我正在使用带有Hibernate标准的Grails,我完全不知道如何在那里做到这一点。这甚至是以任何方式支持的吗?是否有某种方法可以通过自定义SQL表达式进行排序?我不想将我的所有标准重写为纯SQL,只是为了让它正确排序。

3 个答案:

答案 0 :(得分:5)

如果您想订购, HibernateCriteriaBuilder GORM 中设置 NullPrecedence AbstractHibernateCriteriaBuilder 使用order()方法为您提供一个可以像常规Hibernate一样设置 org.hibernate.criterion.Order 的方法

示例

     People.createCriteria().list (){
          order(org.hibernate.criterion.Order.asc('name')
                . nulls(org.hibernate.NullPrecedence.LAST)
           )
     }

答案 1 :(得分:2)

我担心它甚至不在Hibernate中:对此有一个open bug

但是,可以使用该错误评论中的NativeSQLOrder并尝试将正确的函数注入HibernateCriteriaBuilder。您只需要向sqlOrder课程添加HibernateCriteriaBuilder方法,与HibernateCriteriaBuilder.order()大致相同。

答案 2 :(得分:2)

在休眠中,您可以尝试使用以下代码:

标准c = ......;

c.addOrder(Order.asc( “名称”)的空值(NullPrecedence.LAST));