我正在尝试使用 OpenJPA 2.2 有效地获取两级嵌套关联。基本上,我有一个A
有B
很多C
:
@Entity
public class A {
...
@ManyToOne(fetch=FetchType.EAGER)
private B b;
}
@Entity
public class B {
...
@OneToMany(mappedBy="b", fetch=FetchType.EAGER)
private List<C> cs;
}
@Entity
public class C {
...
}
我的 JPQL 查询如下:
SELECT a
FROM A a
WHERE a.id = some condition
我将EagerFetchMode设置为“PARALLEL”,以便有第二个查询来检索Cs
所有Bs
:
<property name="openjpa.jdbc.EagerFetchMode" value="parallel"/>
<property name="org.apache.openjpa.persistence.jdbc.EagerFetchMode" value="PARALLEL"/>
问题是 openjpa 正在生成 n+1 查询而不是 2:一个用于As
andBs
和一个用于 each C
:
SELECT *
FROM a
LEFT OUTER JOIN b
ON a.b_id = b.id
WHERE some condition
和 n 次
SELECT *
FROM c
WHERE c.b_id = x
如何让 openjpa 发出两个查询而不是 n+1?