我认为我永远不会完全理解 fetch joins。
我有一个查询,我正试图急切地将引用“膨胀”到两个级别。
也就是说, myA
有一个可选Collection
的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
s集合(我在 SQL 中看到 a 引用了映射到的表)。B
LEFT JOIN
B
但是,我没有看到这样的证据表明C
's 表已被提取。
如何从给定预取所有“可访问”的C
s 和所有B
s 和所有s ?我看不出有任何方法可以做到这一点。C
A