我有域类:
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年2月:从Grails控制台(Grails 2.0.0)运行时也会出现此行为
这与Grails 1.0.4中有关Hibernates Lazy Initialization的缺陷有关.作为一种解决方法,您可以强制提取这些属性:
child = Child.findByName("Joe", [ fetch: [ toys: 'eager' ] ] )
除此之外,遵循MVC原则,您应该考虑在控制器内执行这些查询,并使结果成为模型的一部分.
顺便说一句.你真的在JSP中做这个吗?或者是GSP?
干杯