grails, отключить активную выборку, когда рендерит список доменов как JSON - PullRequest
2 голосов
/ 12 марта 2012

модель:

class Author{
   String name
   static hasMany = [books: Book]    
}

class Book{
  String name
  Author author

  static belongsTo = Author
}

Тогда у меня есть контроллер

class MyController{
  def authors{
     def authors = Author.getAll()
     render authors as JSON
  }

Проблема в том, что даже если ассоциация Author-Books ленива, для выборки выполняется N + 1 запросс нетерпением книги для каждого автора.Что это происходит и как я могу отключить это

1 Ответ

5 голосов
/ 12 марта 2012

Вы используете конвертер JSON по умолчанию, который пытается конвертировать все поля вашей модели.Вот почему он делает все эти выборки.

Вы должны реализовать свой собственный JSON-конвертер для вашей модели, который не будет запрашивать у DB книги.Вы можете сделать это в BootStrap следующим образом:

import grails.converters.JSON
class BootStrap {
    def init = {servletContext ->
        JSON.registerObjectMarshaller(Author) {
            def returnArray = [:]
            returnArray['name'] = it.name
            return returnArray
    }

}

...