* ToManyコレクションは、HibernateおよびJPAではデフォルトでレイジーです。エラーは、エンティティマネージャー(休止状態でのセッションとも呼ばれます)が閉じられたときに、JacksonがOneToManyをシリアル化しようとしているためです。したがって、怠惰なコレクションを取得することはできません。
デフォルトでJPAを使用したSpringBootは、OpenEntityManagerInViewFilter
を提供します プライマリEM用。これにより、読み取り専用のDBアクセスが可能になりますが、デフォルトでは、プライマリEMでのみ機能します。
3つのオプションがあります:
1)結合フェッチを追加できます。例: FetchModeはどのように機能しますかSpringDataJPAで
2)非プライマリエンティティマネージャーのOpenEntityManagerInViewFilterを追加して、コンテキストに追加できます。
これは課題を意味することに注意してください。BarとFooのインスタンスごとに、アプリはデータベースに戻ってOneToManyを取得します。これはBarでは機能しない部分ですが、Fooでは機能します。これは、各fooとbarについて、スケーラビリティの問題(一部ではN + 1問題と呼ばれる)を意味します。追加のクエリを実行すると、重要な量のFoosとBarに対して速度が低下します。
3)別の方法は、Bar and Fooでコレクションを熱心に作成することです(これを参照 https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch- )ただし、スケーラビリティがまったく問題になる場合は、これを注意深く分析する必要があります。
オプション#1をお勧めします。