Grails: Как я могу искать детей в отношениях с hasMany? - PullRequest
16 голосов
/ 13 марта 2010

Если у меня есть класс домена клиента, и у этого клиента есть много курсов. Как мне найти нужный курс? Например:

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 ]

29 голосов
/ 13 марта 2010

Если вы используете кэш второго уровня и настроили его для этой ассоциации, возможно, вы захотите перебрать коллекцию (это сохранит вам запрос к базе данных, если связь находится в кэше).

Вот пример использования умного Groovy Collection API :

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

Важно: Если вы решите воспользоваться этим подходом, убедитесь, что сконфигурировали eager / batch fetching из courses, чтобы не сталкиваться с проблемой n + 1 .

12 голосов
/ 13 марта 2010

Один из способов - методы динамического поиска:

Courses.findAllByClientAndName(client, 'whatever')

Это приведет к тому, что все курсы клиента получат название «что угодно».

Grails также имеет несколько других способов для достижения этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...