2

模型:

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 个查询以急切地获取每个 Author 的书籍。它会发生什么,我该如何禁用它

4

1 回答 1

5

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

你应该为你的模型实现你自己的 JSON 转换器,它不会向 DB 索要书籍。您可以像这样在 BootStrap 中执行此操作:

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

}

于 2012-03-12T15:41:29.550 回答