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

int*_*rgc 16 grails

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

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

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

def client = Client.get(1)
Run Code Online (Sandbox Code Playgroud)

我想在那个课程关系中"找到"或"搜索".也许是这样的:

client.courses.find(name:'Whatever')
Run Code Online (Sandbox Code Playgroud)

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

Kim*_*ble 29

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

以下是使用聪明的Groovy Collection API的示例:

def course = client.courses.find { it.name == "whatever" }
Run Code Online (Sandbox Code Playgroud)

重要提示:如果您决定采用此方法,请确保配置eager/batch fetching,courses这样您就不会遇到n + 1问题.


ata*_*lor 12

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

Courses.findAllByClientAndName(client, 'whatever')
Run Code Online (Sandbox Code Playgroud)

这将使所有客户的课程命名为"无论什么".

Grails还有其他几种方法可以实现这一目标.

  • 您可以改为在联接列上查询。例如,如果`Course`对象具有`clientId`属性,则使用`findAllByClientIdAndName`。这取决于您的域如何表达两个对象之间的关系。 (2认同)