Запросить подмножество столбцов с помощью Gorm

Предположим, у меня есть следующий класс домена:

class Book {
  String title
  String author
  byte[] largeCoverArtImage
}

У меня есть представление списка, в котором мне не нужно отображать largeCoverArtImage, как я могу выполнить следующий SQL-запрос, используя критерии GORM?

select title, author from Book

person Stephen Swensen    schedule 09.07.2010    source источник


Ответы (2)


Вы можете запускать запросы HQL, которые выбирают отдельные столбцы с помощью executeQuery:

def titlesAndAuthors = Book.executeQuery('select title, author from Book')

Это вернет список объектов [], например.

for (row in titlesAndAuthors) {
   String title = row[0]
   String author = row[1]
   ...
}
person Burt Beckwith    schedule 09.07.2010
comment
Не тот ответ, на который я надеялся, поскольку я не могу использовать стандартный шаблон разбиения на страницы Criteria с executeQuery. Но помечен как принятый ответ (т.е. нет). Я укажу, что решение, которое действительно работает с Critiera, состоит в том, чтобы создать db View и отдельный класс домена (при условии, что устаревший db) специально для страницы списка (тем самым легко используя шаблон разбивки на страницы Criteria). Конечно, недостатком является то, что тогда у вас есть два несовместимых класса, представляющих по существу один и тот же набор записей. - person Stephen Swensen; 22.08.2010

В Grails (проверено с версией 1.3.7) вы можете написать:

def titlesAndAuthors = Book.withCriteria {
        projections {
            property 'title', 'title'
            property 'author', 'author'
        }
}

И вы получите список Object[], как в приведенном выше примере.

person Manuel Vio    schedule 17.05.2011
comment
Круто — приятно знать, что прямо сейчас мы используем версию grails 1.3.2 и в режиме обслуживания, но если у меня когда-нибудь появится возможность обновить и попробовать ее, я вернусь и сообщу вам, как это сработало. - person Stephen Swensen; 17.05.2011
comment
Забегая вперед: сейчас я работаю над проектом, использующим Grails 2.0.3, и это работает хорошо! - person Stephen Swensen; 08.12.2012
comment
Есть ли способ получить список Object{} вместо списка Object[]? использование проекций ломает мой API, потому что я полагаюсь на наличие списков объектов. Однако он извлекает список Object[]. Спасибо за предложение. - person Calicoder; 13.04.2017