2015-06-10 36 views
1

我想弄清楚如何在Grails 3中的多个字段进行排序,其中之一可能或不可以为空。我有这本书域名:排序在GORM的可空字段

​​3210

书籍中包含“外设”的标题有一个sortTitle“外设,”否则sortTitle将是无效的。如果存在sortTitle,我需要按title排序。

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

回答

0

我不能完全弄清楚如何与GORM做纯粹的,但一些生HQL工作:

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

您可以使用:

coalesce(book.sortTitle, book.title)

Here你有官方的Hibernate文档。

1

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

我的建议是总是用你想排序的名字填充sortTitle,然后使用它。

+0

是的,我正在琢磨数据库的影响。这只是一个学习Grails的练习,我想解决这个问题,但对于一个现场制作应用程序,如果创建对象时'sortTitle'留空,我可能会将'sortTitle'设置为'title'的值。 –