Grails GORM中可空字段的排序

Grails GORM中可空字段的排序,grails,gorm,grails-3.0,Grails,Gorm,Grails 3.0,我试图弄清楚如何在Grails3中对多个字段进行排序,其中一个字段可能是空的,也可能不是空的。我拥有以下图书领域: class Book { String title String sortTitle static constraints = { title blank: false sortTitle nullable: true } } 标题为“外围设备”的书籍具有“外围设备”的sortTitle,否则sortTitle将

我试图弄清楚如何在Grails3中对多个字段进行排序,其中一个字段可能是空的,也可能不是空的。我拥有以下图书领域:

class Book {

    String title
    String sortTitle

    static constraints = {
        title blank: false
        sortTitle nullable: true
    }
}
标题为“外围设备”的书籍具有“外围设备”的
sortTitle
,否则
sortTitle
将为空。我想要按
sortTitle
排序的书(如果有),否则按
title
排序

我发现了其他类似的SO问题,但没有一个字段为空。是否有人碰巧有一些指向正确方向的指针?

您可以使用:

合并(book.sortTitle,book.title)


您有官方的Hibernate文档。

我不太明白如何纯粹使用GORM来实现它,但是一些原始HQL可以工作:

def books = Book.findAll("from Book as b order by coalesce(b.sortTitle, b.title)")

我对此不是100%确定,但在我看来,通过合并进行排序将导致数据库执行文件排序,这可能相当昂贵,而不是能够使用索引


我的建议是,总是用您想要排序的名称填充Sortitle,然后使用它。

是的,我在考虑DB的影响。这只是学习Grails的一个练习,我想解决这个特殊的问题,但是对于一个实时制作的应用程序,如果创建对象时
sortTitle
为空,我可能会将
sortTitle
的值设置为
title