通常,当按字段升序排序时,首先获得NULL值,然后获得更有趣的值。通常,您最后需要NULL值。在MySQL中,您可以通过以下方式执行此操作:
SELECT * FROM people ORDER BY ISNULL(name), name;
但是,我正在使用带有Hibernate标准的Grails,我完全不知道如何在那里做到这一点。这甚至是以任何方式支持的吗?是否有某种方法可以通过自定义SQL表达式进行排序?我不想将我的所有标准重写为纯SQL,只是为了让它正确排序。
答案 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));