1

我试图弄清楚如何对 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 问题,但没有一个带有可为空字段的问题。有没有人碰巧在正确的方向上有一些指示?

4

3 回答 3

2

您可以使用:

coalesce(book.sortTitle, book.title)

这里有官方的 Hibernate 文档。

于 2015-06-10T14:24:30.993 回答
1

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

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

于 2015-06-10T23:27:24.087 回答
0

我无法完全弄清楚如何纯粹使用 GORM 来做到这一点,但是一些原始的 HQL 起作用了:

def books = Book.findAll("from Book as b order by coalesce(b.sortTitle, b.title)")
于 2015-06-10T20:35:05.207 回答