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

これは、Hibernates の遅延初期化に関する Grails 1.0.4 の欠陥に関連しています。回避策として、これらのプロパティの熱心なフェッチを強制できます。

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

これとは別に、MVC の原則に従って、コントローラー内でこれらのクエリを実行し、結果をモデルの一部にすることを検討する必要があります。

ところで。本当にJSP内でこれを行っていますか? それともGSPですか?

乾杯

于 2008-12-28T22:52:57.923 に答える