Grails: Как я могу перерыть детей в hasMany отношениях?

Если у меня есть класс домена Client и тот Клиент hasMany Курсы. Как я нахожу курс, который я ищу? Например:

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?

16
задан intargc 13 March 2010 в 06:00
поделиться

2 ответа

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

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

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

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

29
ответ дан 30 November 2019 в 16:18
поделиться

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

Courses.findAllByClientAndName(client, 'whatever')

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

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

12
ответ дан 30 November 2019 в 16:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: