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

Sorting on nullable fields in GORM

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

class Book {

    String title
    String sortTitle

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

标题如 "The Peripheral" 的书籍的 sortTitle 为 "Peripheral, The",否则 sortTitle 将为空。我希望书籍按 sortTitle 排序(如果存在的话),否则按 title.

排序

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

您可以使用:

coalesce(book.sortTitle, book.title)

Here 你有官方的 Hibernate 文档。

我不太明白如何完全使用 GORM 来完成它,但是一些原始的 HQL 可以工作:

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

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

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