FETCH JOIN最大深度?

时间:2012-02-22 11:34:29

标签: java hibernate jpa hql jpql

W试图通过三个级别获取联接:

JOIN FETCH entity1.collection1.collection2  // two OneToMany relations

但得到了:

org.hibernate.HibernateException: Errors in named queries: [...]

是因为它太深,还是因为无法以这种方式获取集合集合?我的最大提取深度为3,如果这是相关的。

同时,我可以从另一端开始执行三重JOIN FETCH:

JOIN FETCH entity3.entity2.entity1  // two ManyToOne relations

不知何故,我在JPA规范或Hibernate文档中找不到任何限制此子句深度的内容。

1 个答案:

答案 0 :(得分:4)

collection1的类型为Collection。而Collection没有collection2字段。这就是我对这些查询的理由。

您必须在集合上创建显式连接:

select e from Entity1 e
left join fetch e.collection1 as c1
left join fetch c1.collection2 as c2

请注意,这将生成笛卡尔积,因此可能会返回大量行。另请注意,只有两个集合中的一个至少是一个集合才有可能。如果它们都是包,那么Hibernate在执行查询时会抛出异常。