2

我有 2 个具有一对多关系的域对象。举个例子:

Class Author{
  static hasMany = [posts: Post]
}
Class Post{
  Author author
}

在数据库中,post 表有一个名为 author_id 的字段。在我的应用程序中,我有一堆我想与帖子相关联的作者 ID。我可以通过首先查询每个作者的数据库,然后调用 author.addToPosts(post) 来做到这一点。但是,由于我已经有了作者对象的 id,我应该可以直接设置 post.authorId = authorId 来建立关联(这是所有 grails 都会做的)并将所需的查询数量减少一半。

在我正在编写的实际应用程序中,这样做会将我需要进行的查询量减少约 70%。这是应用程序的一个关键瓶颈,我不能承受糟糕的 SQL 性能。我可以很容易地编写一个 sql 语句来做到这一点,但我不知道如何让 grails 让我直接设置 author_id 来手动建立关联。在 Rails 中,这种功能内置于活动记录中。grails有没有办法做到这一点?

4

1 回答 1

4

为 Author 配置二级缓存,并且 get() 调用将在大部分情况下从缓存中而不是从数据库中检索(缓存中的实例将在编辑时被刷新)。然后最终效果将是您正在寻找的 - 作者将被缓存,Hibernate 可以使用它来设置 Post 的外键。

于 2010-01-14T06:11:36.953 回答