10

Grailsでエラーが発生する最も一般的な場所はどこorg.hibernate.LazyInitializationExceptionですか?原因は何ですか?どのように解決しましたか?

この 1 つの例外は初心者によく出てくると思います。そのため、より多くの例を提供していただければ幸いです。

4

2 に答える 2

10

例を見てみましょう:

class Book {
  String title
  Author author
}

class Author {
  ...
}

Book book = Book.get(1)

ご存知のように、デフォルトのフェッチモードはドメインクラスでは怠惰です。上記の例を考慮して、bookオブジェクトを取得すると、Bookオブジェクトは休止状態のセッションオブジェクト、つまり第1レベルのキャッシュに自動的にアタッチされます。そして、ドメインオブジェクトがセッションオブジェクトから切り離されてからbook.authorをフェッチしようとすると、この時点でレイジー初期化例外が発生します。

したがって、解決策は、フェッチモードを熱心に使用するか、以下のコードを使用してブックオブジェクトを休止状態のセッションにアタッチすることです。

if(!book.isAttached()){
     book.attach()
}

上記の説明はシナリオの1つです。もっとたくさんあるかもしれません。他の人にもシェアしてもらいたいです。

于 2009-09-08T04:42:06.800 に答える
1

トランザクションではないサービスでユーザーがJSecurity/Shiroを使用して何らかのアクションを実行する権限を持っているかどうかを確認していたため、1つ取得しました。結局、例外を取り除くために、サービスをトランザクションとして設定する必要がありました。

詳細はこちら: http: //www.nabble.com/JSecurity-LazyInitializationException-in-default-DbRealm.isPermitted%28%29-td24939803.html

于 2009-09-02T15:35:50.377 に答える