リレーションシップの反復中に Hibernate の「コレクションの遅延初期化に失敗しました」例外を解決する方法
この問題は、からコレクションにアクセスしようとすると発生します。現在のセッションで完全に初期化されていないエンティティ。この場合、最初のクエリ中に「Topic」エンティティの「comments」コレクションが取得されず、Hibernate 例外が発生します。
これを解決するには、コレクションが遅延ロードされることを理解する必要があります。 Hibernate のデフォルト。これは、親エンティティが取得されるときに要素が積極的にフェッチされるのではなく、実際にアクセスされるときに要素が取得されることを意味します。
「コメント」コレクションを積極的に読み込むには、「トピック」モデルのフィールド マッピングを次のように更新します。 :
@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL) private Collection<Comment> comments = new LinkedHashSet<>();
フェッチ戦略を FetchType.EAGER に設定すると、Hibernate は最初のクエリ中に明示的に「コメント」コレクションをフェッチします。 "topicById" インスタンスにアクセスするときにすべての要素が使用可能であることを確認します。
さらに、長時間実行される操作に対応するためにセッション タイムアウトを増やすか、@OpenSessionInView アノテーションを使用して JSP ビューのレンダリング中に Hibernate セッションが開いたままになるようにすることを検討してください。
以上がHibernate の「コレクションの遅延初期化に失敗しました」例外を修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。