Я не думаю, что когда-либо полностью пойму, чтобы присоединиться к ним.
У меня есть запрос, где я пытаюсь "раздуть" ссылки на два уровня.
То есть мой A имеет необязательный Collection of B s, и каждый B имеет либо 0, либо 1 C. Известно, что размер коллекции B мал (10-20 вершин). Я хотел бы предварительно выбрать этот график.
A B Отмечается как FetchType.LAZY и является необязательным. B отношение к C также необязательно и FetchType.LAZY.
Я надеялся, что смогу сделать:
SELECT a
FROM A a
LEFT JOIN FETCH a.bs // look, no alias; JPQL forbids it
LEFT JOIN a.bs b // "repeated" join necessary since you can't alias fetch joins
LEFT JOIN FETCH b.c // this doesn't seem to do anything
WHERE a.id = :id
Когда я запускаю это, я вижу, что набор A B действительно выбран (я вижу LEFT JOIN в SQL, ссылающемся на таблицу, на которую отображается B).
Однако я не вижу таких доказательств, что таблица C извлекается.
Как я могу предварительно выбрать все C и все B и все C, которые "достижимы" из заданного A? Я не вижу никакого способа сделать это.