Grails:我如何通过hasMany关系搜索孩子?

时间:2010-03-13 06:00:40

标签: grails

如果我有一个客户端域类,并且该客户端有多个课程。我如何找到我正在寻找的课程?例如:

class Client {
    String name
    static hasMany = [courses:Course]
}

class Course {
    String name
    static belongsTo = [client:Client]
}

def client = Client.get(1)

我想在该课程关系中“找到”或“搜索”。也许是这样的:

client.courses.find(name:'Whatever')

有没有办法用Grails做到这一点?

2 个答案:

答案 0 :(得分:29)

如果您正在使用二级缓存并为此关联配置了它,则可能需要遍历该集合(如果该关联位于缓存中,这将为您节省数据库查询。)

以下是使用聪明的Groovy Collection API

的示例
def course = client.courses.find { it.name == "whatever" }

重要提示:如果您决定采用此方法,请务必courses {{1}} {}},这样您就不会遇到configure eager / batch fetching

答案 1 :(得分:12)

一种方法是使用动态查找器方法:

Courses.findAllByClientAndName(client, 'whatever')

这将使所有客户的课程名为“无论什么”。

Grails也有few other ways来完成此任务。