У меня простая ассоциация "один ко многим":
class Foo {
int id
Date someDate
static hasMany = [
bars: Bar
]
}
class Bar {
Foo foo
Date someDate
static mapping = {
.....
columns {
foo([:]) {
column name: "id"
}
}
}
}
В нормальных условиях вызов foo.bars вернет все Bars, и это нормально. Но в этом случае мне нужно запросить, используя аргумент someDate
. Мне нужно с нетерпением получить коллекцию, но я не знаю, как это сделать. Я бы хотел сделать что-то вроде этого:
Foo.withCriteria {
eq("id", someId)
bars {
eq("someDate", ?????)
}
}
Я не уверен, что вкладывать в это значение, поскольку это не известно заранее, или есть ли лучший способ сделать это?
1 ответ
Фильтрация списка внутри родительского класса была бы очень запутанной. Если вам удалось создать экземпляр foo
, где foo.bars
имеет только подмножество списка Bar
, такие вещи, как foo.addToBars
, будут иметь странное поведение, среди других проблем.
Если вам просто нужно найти набор Bar
, принадлежащих данному Foo
, отфильтрованных по их свойству someDate
, вы должны запросить класс Bar
, чтобы начать с участием:
Bar.findAllByFooAndSomeDate(foo, dateVal)
Bar.findAllByFooAndSomeDateBetween(foo, startDate, endDate)
Или же:
Bar.findAll() {
(foo.id == someId) && (someDate == dateVal)
}
И т.п.
Похожие вопросы
Новые вопросы
grails
Grails — это полнофункциональная среда веб-приложений с открытым исходным кодом, использующая язык программирования Groovy (который, в свою очередь, основан на виртуальной машине Java (JVM) и Java). Платформа ориентирована на разработку высокопроизводительных приложений, следуя «кодированию по соглашению» и использует распространенные технологии Java, такие как Hibernate и Spring.