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