2010-01-06 3 views
0

В моем домене 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

ответ

0

Может быть, вам нужно

static mapping = { 
b lazy:false } 
+0

К сожалению, ответить на свой вопрос. В режиме выборки hibernate выполняет соединение или другой выбор при генерации запроса для db. вы можете увидеть что-то вроде «b fetch:« join », которое будет сообщать hibernate для использования соединения, когда вы получите все b вместо другого, выберите « – Derek

+0

Спасибо Derek - это подтвердило то, что я подумал. Я также попробовал решение, предположил, все еще без радости. Являются ли эти два способа определения эквивалента fetchmode, или один заменил другой? – DaveH

+0

Привет, Дейв, я думаю, что он не заменил другого. Есть небольшая разница. Если вы используете lazy: false it вы будете получать выборку с помощью другого запроса SELECT. Если вы используете fetch: join, он будет получать fetch (вам не нужно lazy: false), используя запрос JOIN. Не знаете, почему вы не возвращаете данные. Вы заполняете БД скриптом начальной загрузки или вручную с sql перед тестом? – Derek

Смежные вопросы