2008-12-28 47 views
3

我有域类:如何从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年2月:从Grails的控制台上运行时,这种行为也存在(Grails的2.0.0)

回答

8

这涉及关于Hibernate的延迟初始化的Grails 1.0.4的一个缺陷。作为一种变通方法,您可以强制这些属性预先抓取:

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

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

Btw。你真的在JSP内部做这个吗?或者是普惠制?

干杯

+0

它来自JSP。我正在改进从视图查询的遗留应用程序。我应该改变它遵循Spring/Grails的MVC模式。 – 2008-12-28 23:16:11