【问题标题】:grails, disable eager fetching when render a domain list as JSONgrails,在将域列表呈现为 JSON 时禁用渴望获取
【发布时间】:2012-03-12 15:00:59
【问题描述】:

型号:

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 的书籍。它会发生什么,我该如何禁用它

【问题讨论】:

  • 您使用的 JSON 转换后的完整类路径是什么?
  • 我使用默认的 JSON 实现:grails.converters.JSON

标签: json grails associations lazy-evaluation eager


【解决方案1】:

您正在使用默认的 JSON 转换器,它会尝试转换模型的所有字段。这就是它进行所有这些选择的原因。

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

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

}

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2011-05-09
    • 2014-08-11
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多