Получение наборов объектов от GORM - PullRequest
1 голос
/ 04 февраля 2011

Я работаю над Grails. В какой-то момент я должен получить большие наборы объектов из БД, основываясь на их идентификаторах. Если я делаю этот идентификатор по идентификатору, производительность очень плохая.

ids.each{
   Myclass.findById( id )
   ...
}

Учитывая, что для хранения пакетов есть полезное закрытие withTransaction , возможно ли сделать что-то подобное для извлечения объектов вместо их хранения?

Другой идеей может быть длинный HQL-запрос, такой как:

"select * from Myclass where (id = 1) OR ( id = 2) ... OR ( id = n )"

Это правильное решение?

Спасибо!

1 Ответ

2 голосов
/ 04 февраля 2011

Как отмечено в этого вопроса , HQL поддерживает лучший синтаксис для выбора на основе группы значений, который поддерживается методом GORM find(). GORM динамические искатели также поддерживают синтаксис, такой как:

def myObjs = MyClass.findByIdInList(ids)

Точно так же, если ваша операция доступна только для чтения, вы можете использовать getAll(), которая будет использовать преимущества, которые Hibernate может сделать для переходов только для чтения.

...