OpenJPA 2.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
すべての:を取得する2番目のクエリを作成するために、 EagerFetchModeを「PARALLEL」に設定しました。Cs
Bs
<property name="openjpa.jdbc.EagerFetchMode" value="parallel"/>
<property name="org.apache.openjpa.persistence.jdbc.EagerFetchMode" value="PARALLEL"/>
問題は、openjpaが2ではなくn+1個のクエリを生成していることAs
です。Bs
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ではなく2つのクエリを発行させるにはどうすればよいですか?