【问题标题】:Sorting on nullable fields in GORM在 GORM 中对可为空的字段进行排序
【发布时间】:2015-06-10 12:43:20
【问题描述】:

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

【问题讨论】:

    标签: grails grails-orm grails-3.0


    【解决方案1】:

    你可以使用:

    coalesce(book.sortTitle, book.title)

    Here你有官方的 Hibernate 文档。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,我在思考数据库的影响。这只是学习 Grails 的练习,我想解决这个特殊问题,但对于实时生产应用程序,如果在创建对象时将 sortTitle 留空,我可能只需将 sortTitle 设置为 title 的值.
      【解决方案3】:

      我不太清楚如何纯粹使用 GORM 来完成,但一些原始 HQL 工作:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 2018-09-13
        • 2010-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多