次のドメインモデルを前提Answerとして、Valuesとそれぞれのサブ子を含むすべてのをロードし、それをに入れてAnswerDTOJSONに変換したいと思います。私は実用的な解決策を持っていますが、アドホックを使用して取り除く必要があるN + 1の問題に悩まされています@EntityGraph。すべての関連付けが構成されますLAZY。
@Query("SELECT a FROM Answer a")
@EntityGraph(attributePaths = {"value"})
public List<Answer> findAll();
アドホック使用@EntityGraph上のRepository方法私は値が上にN + 1を防止するために、プリフェッチされることを保証することができるAnswer->Value関連付けを。私の結果は問題ありませんselectedが、MCValuesの関連付けの遅延読み込みのため、別のN + 1問題があります。
これを使う
@EntityGraph(attributePaths = {"value.selected"})selectedもちろん、フィールドは一部のValueエンティティの一部にすぎないためです。
Unable to locate Attribute  with the the given name [selected] on this ManagedType [x.model.Value];selected値がaの場合にのみ、関連付けをフェッチしようとするようJPAに指示するにはどうすればよいMCValueですか?のようなものが必要ですoptionalAttributePaths。

selectedを含む回答を取得するためのクエリですMCValue。これには追加のループが必要であり、データセット間のマッピングを管理する必要があるのが嫌いでした。私はこれのためにHibernateキャッシュを活用するあなたの考えが好きです。結果を格納するためにキャッシュに依存することは(一貫性の観点から)どの程度安全かについて詳しく説明できますか?これは、クエリがトランザクションで行われたときに機能しますか?私は見つけるのが難しく、散発的な遅延初期化エラーを恐れています。