2015-06-10 2 views
1

Я пытаюсь выяснить, как сортировать по нескольким полям в Grails 3, один из которых может быть или не быть нулевым. У меня есть этот домен книги:Сортировка по полям с нулевым значением в GORM

class Book { 

    String title 
    String sortTitle 

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

книг с названиями вроде «периферийным» имеют sortTitle из «периферийных устройств, The», в противном случае 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 у вас есть официальная документация гибернации.

1

Я не 100% уверен в этом, но мне кажется, что сортировка по COALESCE приведет к тому, что база данных сделает сортировку файла, которая может быть довольно дорогой, а не способна использовать индекс.

Мое предложение было бы всегда заполнять sortTitle с именем, которое вы хотите отсортировать, а затем просто использовать.

+0

Да, я размышлял над воздействием БД. Это всего лишь упражнение по изучению Grails, и я решил решить эту конкретную проблему, но для живого приложения для производства я бы просто установил 'sortTitle' значение' title', если 'sortTitle' остается пустым при создании объекта , –

 Смежные вопросы

  • Нет связанных вопросов^_^