3

我有域类:

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) 运行时也会出现此行为

4

1 回答 1

8

这与 Grails 1.0.4 中有关 Hibernates 延迟初始化的缺陷有关。作为一种解决方法,您可以强制急切获取这些属性:

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

除此之外,遵循 MVC 原则,您应该考虑在控制器内部执行这些查询,并使结果成为模型的一部分。

顺便提一句。你真的在 JSP 中这样做吗?还是普惠制?

干杯

于 2008-12-28T22:52:57.923 回答