我有两个具有一对多关系的域对象。仅作为一个例子:
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有没有办法做到这一点?
答案 0 :(得分:4)
为Author和get()调用配置第二级缓存将从缓存中检索,而不是从数据库中检索大部分(缓存中的实例将在编辑时刷新)。然后净效果将是您正在寻找的 - 作者将被缓存,Hibernate可以使用它来设置Post的外键。