0

こんにちは、悪名高い「セッションがないか、セッションが閉じられていません」というメッセージが表示されます。これは、別のセッションで休止状態の永続オブジェクトのコレクションを呼び出そうとしているためです。フィルタに JOIN フェッチ モードを追加します....

GRAVE: ロールのコレクションの遅延初期化に失敗しました: ni.edu.uni.id.data.object.Curso.modulos、セッションまたはセッションは閉じられませんでした org.hibernate.LazyInitializationException: ロールのコレクションの遅延初期化に失敗しました: ni. edu.uni.id.data.object.Curso.modulos、セッションがないか、セッションが閉じられませんでした

4

3 に答える 3

0

永続オブジェクトを更新することをお勧めします。getById()たとえば、オブジェクトの ID を渡してDAO を呼び出し、必要なコレクションを使用します。

于 2011-03-28T10:02:12.867 に答える
0

これは、元のセッションが閉じられているために発生します。アイテムをメモリに保存する前、および Hibernate セッションを閉じる前に、後で使用するリンクされたコレクションにアクセスして、メモリにロードされるようにする必要があります。これに代わる方法は、Eager ロードされるようにコレクションをセットアップすることですが、これはパフォーマンスに影響を与える可能性があります。

コレクションを手動でプリロードすることは、プロパティにアクセスすることでも簡単に実行でき.Countます (C#、ただし Java にも同じことが当てはまります)。例:

Brand b = BrandRepository.GetById(1234);
int tmp = b.Products.Count; //this is only to load the products collection.  This can then be used in a later session.
于 2012-10-23T08:02:47.937 に答える
-1

session.merge は、正確な状況に応じて役立つ場合があります

于 2011-03-28T05:20:30.550 に答える