2015-06-10 24 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'的值。 –