現在、データベースクエリにQueryDSLを使用していますが、質問はより一般的に休止状態に関連していると思います..
私は疑問に思っています: HQL は、クエリを実行するエンティティを休止状態のコンテキスト/キャッシュに配置して、そこからアクセスできるようにしますか? エンティティに対してビッグを実行し、leftjoin
すべての子関係を明示的に収集する場合、結果をエンティティ オブジェクトにマッピングするときにその情報を使用するように hibernate に指示できれば、遅延読み込みを節約できるはずだと考えています。方法がわかりません..
例:
A には B があり、B には C があります。ここで、特定の A に対してクエリを作成し、fetch all
それを B および C と結合すると (クエリ DSL 実装):
List<A> as = query.from(QA.a).leftJoin(QA.a.b,QB.b).leftJoin(QB.b.c,QC.c).where(a.id.eq("1)).fetchAll();
私は言う素敵なSQL文を取得します
select... from A inner join B ... inner join C ... where ...
したがって、休止状態が初期化するのに十分な結果が得られるはずです
as.get(index).getBs()
as.get(index).getBs().get(index).getCs()
代わりにクエリを実行します
select ... from B where B.aId = ??
1回の結合ですべての子を持つエンティティを初期化することで、これらの遅延読み込みを減らすことはまったく可能ですか?
結合を使用してすべてのデータをロードすると、休止状態はそれらをキャッシュに保持し、それらの遅延ロードのためにそのキャッシュにアクセスしますか、それともデータベースをポーリングしますか? 私はそれについて発言権を持っていますか、それとも完全に私の手に負えませんか?
皆さんありがとう!