Как ссылаться на поля класса домена 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?
Приветствия