4

OpenJPA 2.2を使用して、2レベルのネストされたアソシエーションを効率的にフェッチしようとしています。基本的に、私は多くのAものを持っているものを持っています:BC

@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」に設定しました。CsBs

<property name="openjpa.jdbc.EagerFetchMode" value="parallel"/>
<property name="org.apache.openjpa.persistence.jdbc.EagerFetchMode" value="PARALLEL"/>

問題は、openjpaが2ではなくn+1個のクエリを生成していることAsです。BsC

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つのクエリを発行させるにはどうすればよいですか?

4

0 に答える 0