私はこのような構造を持っています:
- A には B のコレクションが含まれます (not-lazy としてマップされます)
- B には C のコレクションが含まれます (not-lazy としてマップされます)
C オブジェクトを含まない B オブジェクトを含む A オブジェクトを取得するクエリを作成したいと思います。それは可能ですか?逆の方法もうまくいきます (BC リレーションが遅延マッピングされ、クエリが B と C を含む A を取得する場合)。
ありがとう!
いいえ、できません。アソシエーション自体を熱心にロードするようにマークしたため、Hibernate は常にこのアソシエーションを積極的にロードします。
アソシエーションを遅延 (toMany アソシエーションのデフォルト) としてマークすると、以下を使用して、クエリでそれらを熱心にフェッチするオプションがありますjoin fetch
。
select a from A a left join fetch a.bs b left join fetch b.cs
両方のコレクションがバッグ (つまり、インデックス列のないリスト) の場合、これは機能しないことに注意してください。