如何在EclipseLink中级联@JoinFetch?

cen*_*cen 6 java jpa eclipselink

我有以下模型:订单有多个项目,项目有多个其他孩子.它是几层深的树.

我对所有急切装载@OneToMany连同@JoinFetch和所有迟缓装载@ManyToOne(以避免在N + 1个问题的其他查询).

根据我如何在JPQL中进行"深度"提取连接?我可以使用多个查询提示来推测加载整个树,但是,我更喜欢仅通过注释来执行此操作.

不幸的是,即使对整个树进行了注释@JoinFetch,似乎连接只执行1级深度,导致多个查询而不是整个树的单个查询.

这些是我可以看到执行的查询:

订单 - 所有孩子的左外连接.

OrderItem - 所有子项的左外连接.

所有级别的......等等.

我可以看到@JoinFetch它正在工作,但它只能在一个层次上工作.我想要实现的是一个加载整个树的单个查询.

虽然这个级别的深度加载确实帮助我加快了超过2倍的调用,但是当一次加载大量实体​​时它们仍然不是最理想的,因为每个权限意味着5个以上的额外查询.

有没有办法仅使用注释加载整个树,还是应该手动设置多个查询提示来实现此目的?

由詹姆斯·萨瑟兰答案在这里似乎并不为真(约递归工作).

cen*_*cen 0

经过多次实验,我得出的结论是(设计?)的注释只能在 1 层深度起作用。为了完全控制,我放弃了注释并使用查询提示。跟踪错误。