Как ссылаться на поля класса домена Grails вне контроллера Grails и просматривать?

У меня есть классы домена:

class Child {
    static hasMany = [ toys : Toy ]
    String name
    Set  toys
}
class Toy {
    static belongsTo = [ owner : Child ]
    String name
}

В моем JSP я ссылаюсь на ребенка по:

child = Child.findByName("Joe")

или

child = Child.findById(123)

Но когда я пытаюсь получить доступ к его полям:

child.getToys()

Я получаю сообщение об ошибке:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: Child.toys, no session or session was closed

Нужно ли вручную запускать сеанс Hibernate? Если да, то как мне это сделать?

Последующий февраль 2012. Это поведение также присутствует при запуске с консоли Grails (Grails 2.0.0)

Ответ 1

Это относится к недостатку в Grails 1.0.4 относительно спящего режима Lazy Initialization. В качестве обходного пути вы можете заставить нетерпеливо извлекать эти свойства:

child = Child.findByName("Joe", [ fetch: [ toys: 'eager' ] ] )

Помимо этого, следуя принципам MVC, вы должны рассмотреть возможность выполнения этих запросов внутри контроллера и внесения результатов в модель.

Btw. вы действительно делаете это внутри JSP? Или это GSP?

Приветствия