2012-03-12 18 views
2

型号:Grails的,禁用预先抓取时呈现域列表作为JSON

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 
    } 

的问题是,即使关联作者书籍很懒,执行N + 1个查询以获取每个作者的书籍。这是怎么回事,我该如何禁用它

+0

什么是JSON的全类路径转换的您正在使用? – 2012-03-12 15:20:02

+0

即时通讯使用默认的JSON实现:grails.converters.JSON – geo 2012-03-12 15:45:34

回答

5

您正在使用默认的JSON转换器,它试图转换您的模型的所有领域。这就是为什么它正在做所有这些选择。

你应该为你的模型实现你自己的JSON转换器,它不会向DB请求书籍。你可以做到这一点自举这样的:

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

}