私は eclipselink.join-fetch ヒントをグラスフィッシュで動作させるのに本当に苦労しています。
Task オブジェクトのコレクションを含む Client オブジェクトがあり、Task オブジェクトには WorkPeriod オブジェクトのコレクションがあります。
私のコードは次のようになります。
Query query = entityManager.createQuery("select client from Client client left join fetch client.tasks");
//Set hint to allow nested fetch joins
query.setHint("eclipselink.join-fetch","client.tasks.workPeriods");
List<Client> clients = query.getResultList();
しかし、TOPLINK デバッグ レベルを fine に設定したときに何をしても、実際に実行される SQL は常に次のように表示されます。
SELECT t0.ID, t0.NAME, t1.ID, t1.DESCRIPTION FROM CLIENT t0 LEFT OUTER JOIN (CLIENT_TASK t2 JOIN TASK t1 ON (t1.ID = t2.tasks_ID)) ON (t2.Client_ID = t0.ID)
明らかに、結合フェッチの第 3 層を実行していません。
他の誰かがこれに問題を抱えていましたか...それとも私だけですか:-(
ヘルプやヒント (しゃれは意図していません) をいただければ幸いです。