コレクション要素に独自のコレクションがある場合、基本的なクエリが機能しないようです。
ポートフォリオを持ち、投資を行う顧客を持つ銀行のデータ モデルを想像してみてください。集客の正しい方法とは?
私はこれを試しました:
@Query("SELECT DISTINCT c FROM Customer c LEFT JOIN FETCH c.portfolios")
しかし、「ロールのコレクションを遅延して初期化できませんでした」で失敗します。
投資は次のように定義されます。
@ManyToMany(cascade = CascadeType.ALL)
fecthType を変更すると、クエリが機能します。
@ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
しかし、fetchtype を変更せずに動作させる方法はありますか?
編集:
上記のクエリを定義するために Spring の JpaRepository を使用したことを言及しておく必要があります。すべてのエンティティにはそれぞれのリポジトリがありますが、Customers をフェッチしても Portfolios リポジトリのメソッドに触れないように見えます (これは、投資を LEFT JOIN します)。そのため、投資は決してフェッチされません。
また、同様のクエリを使用してポートフォリオをフェッチすることもできます。Investment にはコレクションがないため、正常に動作します。しかし、チェーン顧客 -> ポートフォリオ -> 投資の取得は失敗します。