ホームページ >Java >&#&チュートリアル >Hibernate の「ロールのコレクションの遅延初期化に失敗しました」という例外を修正するにはどうすればよいですか?

Hibernate の「ロールのコレクションの遅延初期化に失敗しました」という例外を修正するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-29 10:09:10795ブラウズ

How to Fix Hibernate's

「ロールのコレクションの遅延初期化に失敗しました」Hibernate 例外の除去

アクセスしようとすると、Hibernate の「ロールのコレクションの遅延初期化に失敗しました」例外が発生する可能性がありますセッションコンテキストの外で遅延ロードされるコレクション。この問題を解決するには、特定のシナリオを詳しく調べてみましょう。

提供されたコードは、Topic モデルで @OneToMany 関係を定義し、Comment モデルによってマップされます。コントローラーで、Topic インスタンスとそのコメントを取得します。その後、JSP ビューはコメントを反復して表示します。ただし、コメント コレクションはデフォルトで遅延読み込みされるため、例外がトリガーされます。

これを修正するには、2 つのオプションがあります:

1。積極的な読み込み:

積極的な読み込みを使用するようにトピックのコメント フィールド マッピングを更新します:

@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL)
private Collection<Comment> comments = new LinkedHashSet<>();

積極的な読み込みにより、トピックの読み込み時にコメント コレクションが初期化され、例外。

2.オープンセッションでの遅延読み込み:

または、コメントコレクションを遅延読み込みのままにし、コメントにアクセスするときに Hibernate セッションが開いていることを確認することもできます:

コントローラー内:

Topic topicById = service.findTopicByID(id);

// Start a new Hibernate session
Session session = sessionFactory.getCurrentSession();

Collection<Comment> commentList = topicById.getComments();

// Close the session once done
session.close();

// Pass the commentList to the view
//...

コントローラー内で新しいセッションを開くと、 Hibernate には、コメント コレクションを初期化するために必要なコンテキストがあります。終了したらセッションを明示的に閉じることを忘れないでください。

大規模なコレクションでは積極的な読み込みがパフォーマンスに影響を与える可能性があることに注意してください。そのため、アプリケーションのニーズに最も適したアプローチを選択してください。

以上がHibernate の「ロールのコレクションの遅延初期化に失敗しました」という例外を修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。