在GORM中对可空字段进行排序

时间:2015-06-10 12:43:21

标签: grails gorm grails-3.0

我试图弄清楚如何对Grails 3中的多个字段进行排序,其中一个字段可能为空,也可能不为空。我有这本书的域名:

class Book {

    String title
    String sortTitle

    static constraints = {
        title blank: false
        sortTitle nullable: true
    }
}

书籍标题为" The Peripheral"有一个sortTitle"外围设备,",否则sortTitle将为空。我希望书籍按sortTitle排序(如果存在),否则按title排序。

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

3 个答案:

答案 0 :(得分:2)

您可以使用:

coalesce(book.sortTitle, book.title)

Here你有正式的Hibernate文档。

答案 1 :(得分:1)

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

我的建议是始终使用您要排序的名称填充sortTitle,然后使用它。

答案 2 :(得分:0)

我无法完全弄清楚如何使用GORM完成它,但是有些原始HQL有效:

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