W 试图获取三个级别的连接:
JOIN FETCH entity1.collection1.collection2 // two OneToMany relations
but got:
org.hibernate.HibernateException: Errors in named queries: [...]
是因为太深了,还是因为这样无法取出集合的集合?如果相关的话,我的最大获取深度是 3。
同时,我可以从另一侧开始执行三重 JOIN FETCH:
JOIN FETCH entity3.entity2.entity1 // two ManyToOne relations
不知何故,我在 JPA 规范或 Hibernate 文档中找不到任何会限制本条款深度的内容。
collection1
属于类型Collection
. And a Collection
没有collection2
场地。这就是我对此类查询的推理方式。
您必须在集合上创建显式联接:
select e from Entity1 e
left join fetch e.collection1 as c1
left join fetch c1.collection2 as c2
请注意,这将产生笛卡尔积,因此可能返回大量行。另请注意,只有当两个集合中至少有一个是集合时才有可能。如果它们都是包,Hibernate 在执行查询时会抛出异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)