2017-10-19 6 views
0

私は以下のクラスを持っています。JPQLは複数のテーブルからデータを取得します

class A{ 

    @OneToMany 
    List<B> bList; 
} 

class B{} 

class C extends A{ 

    @OneToMany 
    List<D> dList; 
} 

class D{} 

@OneToMany関係ごとにレイジーローディングを使用しました。

BとDにアクセスするときに他のデータベース呼び出しを起動しないように、「結合フェッチ」を使用してCからすべてのデータをフェッチすることが条件です。 基本的に、BとDの読み込みでCをフェッチしたい "EAGERこれはJPQLとできない場合は、 『

をCBのJOIN C C左からDISTINCT Cを選択「次 のような 何か』、それがJavaの基準のAPIで実現することができますか?

答えて

0

はい、それは可能である,,それは次のようにする必要があります:コードの上に

CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<String> cq = cb.createQuery(String.class); 
Root<C> c = cq.from(C.class); 
Join<C,B> b = c.join("b", JoinType.LEFT); //left outer join 
b.on(
    //define criteria here 
    ) 
); 
cq.select(b.<String>get("field names")); 

List<String> results = em.createQuery(cq) 
         .getResultList(); 

要件のために微調整する必要があります。

関連する問題