Я не думаю, что когда-либо полностью пойму, чтобы присоединиться к ним.
У меня есть запрос, где я пытаюсь "раздуть" ссылки на два уровня.
То есть мой 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
? Я не вижу никакого способа сделать это.