Как ссылаться на поля класса домена Grails извне контроллера Grails и вида? - PullRequest
3 голосов
/ 29 декабря 2008

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

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 Ответ

8 голосов
/ 29 декабря 2008

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

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

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

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

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...