Grails获得一个';s其中使用B'搜索;在多对多关系中

Grails获得一个';s其中使用B'搜索;在多对多关系中,grails,gorm,Grails,Gorm,我有以下域对象: class Blog { String foo } class Comment { String bar } class BlogComment { Blog blog Comment comment } 到目前为止,我写了以下内容: def getComments(Blog blog) { def blogCommentCriteria = BlogComment.createCriteria() def blogComment

我有以下域对象:

class Blog {
   String foo
}

class Comment {
   String bar
}

class BlogComment {
   Blog blog
   Comment comment
}
到目前为止,我写了以下内容:

def getComments(Blog blog) {
    def blogCommentCriteria = BlogComment.createCriteria()

    def blogCommentResults = blogCommentCriteria.list {
        eq 'blog.id', blog.id
    }

    List<Comment> comments = new Vector<Blog>()

    blogCommentResults.each { i ->
        if(i.blog == blog) {
            comments.add(i.comment)
        }
    }

    comments
}
def getComments(博客){
def blogcomentcriteria=blogcoment.createCriteria()
def blogCommentResults=blogCommentCriteria.list{
等式'blog.id',blog.id
}
列表注释=新向量()
blogCommentResults.each{i->
如果(i.blog==blog){
添加(i.comment)
}
}
评论
}

最有效的方法是什么?我希望该方法简洁明了,但在所用时间方面也很有效。

您可以向Blog类添加一个方法,以获取与给定Blog相关的评论:

class Blog {
   String foo

   def getComments() {
        BlogComment.findAllByBlog(this)*.comment
   }
}

看起来很破,但也许不是。看起来您正在对
blog.id
执行部分筛选,但随后执行客户端二级筛选(
i.blog==blog
),这是如何执行错误数据库查询的一个很好的示例。始终尽可能多地在数据库中进行筛选。但是您正在检查之前在查询中使用的内容,对吗?获取指定的
博客
的所有
博客评论
,然后循环浏览并仅保留指定的
博客
?不相关但令人惊讶-向量
是怎么回事?这不是一个以效率著称的课程。