2009-09-02 12 views
9

Grailsでorg.hibernate.LazyInitializationExceptionを取得した最も一般的な場所はどこですか?その原因は何ですか?どのように解決しましたか?GrailsとHibernateの遅延初期化例外

私はこの1つの例外が初心者のために多くなると思います。もっと多くの例を提供すれば、それは素晴らしいことでしょう。

答えて

10

に例を取ることができます。上記の例を考慮して、ブックオブジェクトを取得すると、ブックオブジェクトは、休止状態のセッションオブジェクト、すなわち第1レベルのキャッシュに自動的にアタッチされる。また、ドメインオブジェクトがセッションオブジェクトから切り離され、book.authorを取得しようとすると、この時点でLazy初期化例外が発生します。

だから、解決策は熱心としてフェッチモードまたは下記のコードを使用してセッションを休止状態にするためにあなたの本のオブジェクトを添付のいずれか持っている、次のとおりです。

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

上記の説明は、シナリオの一つです。もっと多くのことがあります。私は他人に分かち合うように頼む。

+1

私は本当にうまくいくが、どこにでも置くのは面倒だ! – IgniteCoders

+0

@IgniteCoders AmitはSOでアクティブに見えません。 1つのセッションでどのような原因とオブジェクトが切り離されるのか知っていますか? –

+0

@AlexanderSuraphel私は本当に知りません。例外がどこかで起きたときに置くだけです – IgniteCoders

1

私は、ユーザーがトランザクションではないサービスでJSecurity/Shiroを使って何らかのアクションを実行する権限を持っているかどうかをチェックしていたので、1つを取得しました。最後に、例外を取り除くためにサービスをトランザクションとして設定しなければなりませんでした。ここ

詳細情報:モードは、ドメインクラスで怠惰であるフェッチ私たちが知っているように、

class Book { 
    String title 
    Author author 
} 

class Author { 
    ... 
} 

Book book = Book.get(1) 

デフォルト:http://www.nabble.com/JSecurity-LazyInitializationException-in-default-DbRealm.isPermitted%28%29-td24939803.html

関連する問題