Grails - у hasMany слишком много, нужно ограничить результаты get () в Oracle - PullRequest
4 голосов
/ 16 февраля 2011

Я использую Oracle и Grails 1.3.7 и имею следующую ситуацию:

Домены

class Publisher {
  static hasMany = [books : Book]
}
class Book {
  Publisher pub
  Date datePublished
}

PublisherController

def show = {
   def publisherInstance = Publisher.get(params.id)
   ...
}

Давайте представим, что у каждого издателя тысячи книг.После Publisher.get (params.id) к publisherInstance будут прикреплены тонны книг.В действии контроллера показа возможно разбить на страницы книги, показанные datePublished?Я играю с Критерием, но мне не повезло.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 17 февраля 2011

Когда вы загружаете Publisher, книги не загружаются, пока вы не получите доступ к коллекции books - она ​​лениво загружается по требованию именно по этой причине.Если вы хотите получить несколько книг издателя, используйте запрос, например,

def publisherInstance = Publisher.get(params.id)

int offset = ...
def books = Book.findAllByPublisher(publisherInstance, [max: 10, offset: offset])

и, чтобы выбрать правильную страницу, рассчитайте offset из параметров нумерации страниц.

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

Вместо динамического поиска в общем случае можно использовать критерии:

class Book {
      static belongsTo = [publisher: Publisher]
}

И получить список из 10 первых книг издательства "2"

offset = 0
// Get books of publisher
def queryResult = Book.createCriteria().list(max: 10, offset: offset) {                 
                publisher {
                    eq("id", 2)
                }
            }
...