Если у меня есть класс домена 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?
Если вы используете кеш второго уровня и настроили его для этой связи, вы можете захотеть перебрать коллекцию (это сэкономит вам базу данных запрос, если ассоциация находится в кеше).
Вот пример использования умного Groovy Collection API :
def course = client.courses.find { it.name == "whatever" }
Важно: если вы решите использовать этот подход, обязательно настройте активную / пакетную выборку из курсы
, чтобы не столкнуться с проблемой n + 1 .
Один из способов - использовать методы динамического поиска:
Courses.findAllByClientAndName(client, 'whatever')
Это позволит получить все клиентские курсы с именем «что угодно».
В Grails также есть несколько других способов для этого.