В моем домене Grails у меня есть что-то вроде следующегоGrails - fetchmode - что это?
class A {
String name
static hasMany = [ b : B ]
SortedSet b
static fetchMode = [ b:"eager" ]
}
class B implements Comparable{
A a
... compareTo method defined ....
}
То, что я пытаюсь сделать, это получить экземпляр класса А, и в то же время есть его коллекция (б) заселена.
Так что я A.get (1), ожидая, что б быть заселена,
но b.each() { Println это }
говорит мне, что я звоню каждый на null object
Я боюсь, что я принципиально пропустил здесь пункт, но я не вижу, что я делаю неправильно.
Я запускаю это как интеграционный тест против базы данных MySql. База данных, по-видимому, заполнена данными, которые позволят установить связь между A и B.
Любая помощь очень ценится.
Dave
К сожалению, ответить на свой вопрос. В режиме выборки hibernate выполняет соединение или другой выбор при генерации запроса для db. вы можете увидеть что-то вроде «b fetch:« join », которое будет сообщать hibernate для использования соединения, когда вы получите все b вместо другого, выберите « – Derek
Спасибо Derek - это подтвердило то, что я подумал. Я также попробовал решение, предположил, все еще без радости. Являются ли эти два способа определения эквивалента fetchmode, или один заменил другой? – DaveH
Привет, Дейв, я думаю, что он не заменил другого. Есть небольшая разница. Если вы используете lazy: false it вы будете получать выборку с помощью другого запроса SELECT. Если вы используете fetch: join, он будет получать fetch (вам не нужно lazy: false), используя запрос JOIN. Не знаете, почему вы не возвращаете данные. Вы заполняете БД скриптом начальной загрузки или вручную с sql перед тестом? – Derek