【问题标题】:how not to load hasMany entities from database using Grails如何不使用 Grails 从数据库中加载 hasMany 实体
【发布时间】:2016-01-11 16:35:34
【问题描述】:

我有 3 节课:

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

class Book {
     static mapping = {
        collection "documents"
        id generator: 'assigned',index: true, indexAttributes:[background:true, unique:true, dropDups:true] 
    }
    String id
    String name
}

class Company {
     static mapping = {
        collection "documents"
        id generator: 'assigned',index: true, indexAttributes:[background:true, unique:true, dropDups:true] 
    }
    String id
    String name
}

我想用

Author author = Author.getByCompanyAndBook(1,1);

但是当运行这个 Grails 时,它会从数据库中检索所有 Book 对象。

我只需要这些书籍作为作者的标识符,我不会使用这些对象。

有没有办法让 Grails 不从数据库中获取书籍和公司?

我尝试使用:

static mapping = {
    books lazy: true
}

但仍然加载了所有书籍和公司。

编辑:

我使用 mongo db 作为我的数据库。

【问题讨论】:

  • 你使用的是什么 grails 版本?

标签: grails has-many


【解决方案1】:

这很奇怪 - 默认情况下,集合是惰性的,因此在您访问 books 属性之前,获取作者不应该检索图书集合中的任何内容。但无论如何,即使它按预期工作,我建议您避免映射集合。请参阅 this talk,它说明了为什么收集不必要地昂贵,并提供了解决方法以最大限度地降低成本。

【讨论】:

  • 感谢您的回复,实际上我正在使用 Intellij Debugger 来找出回报。我正在使用 mongodb,所以我无法(至少我知道)检查确切的查询是什么。但在调试器中,我可以访问书籍集合中的所有书籍数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多