4

我正在尝试使用 OpenJPA 2.2 有效地获取两级嵌套关联。基本上,我有一个AB很多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:一个用于AsandBs和一个用于 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?

4

0 回答 0