Grails: как вернуть экземпляр класса домена при использовании проекций - PullRequest
2 голосов
/ 15 декабря 2010

У меня есть класс домена, который имеет около 20 свойств. FindBy для класса домена приводит к запросу на выборку, в котором все столбцы выбраны из базы данных, что может привести к снижению производительности, если требуемый столбец может быть только 1.

Итак, я подумал об использовании с критериями.

def sampleDomainInst = SampleDomain.withCriteria{
    projections {
        property('fieldOne')
       }
     eq('id', idVal)
  } 

Возвращаемое значение является списком. Но мне нужен экземпляр SampleDomain Как мне это сделать?

Спасибо. С Уважением, Джей Чандран

Ответы [ 3 ]

0 голосов
/ 15 декабря 2010

Попробуйте withCriteria(uniqueResult: true) {...} или, больше, SampleDomain.createCriteria().get {...}.

OTOH, как вы можете выбрать только 1 столбец, если вы выбираете весь объект SampleDomain (если большинство его свойств не лениво-неправдоподобный)?Это звучит неясно.

// И я считаю, что вы получите больше хитов производительности, чем выбор 20 полей для 1 записи.

0 голосов
/ 14 июня 2011
def whatYouWant = sampleDomainInst[0] 

если я что-то упустил.

0 голосов
/ 15 декабря 2010

Цель прогнозов - ИМХО не возвращать экземпляры домена. Теоретически вы можете добавить 'id' к закрытию проекций, а затем вы можете создать DomainClass.get (id). Но это то же самое, что работать полностью без проекции.

Если ваш класс домена имеет так много свойств, что вы используете проекции, чтобы получить только их части, вам следует рассмотреть возможность разделения класса домена на несколько объединенных классов. Хорошей практикой проектирования является то, что каждый класс должен представлять только одну абстракцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...