2017-10-19 153 views
0

我有以下類。JPQL從多個表中提取數據

class A{ 

    @OneToMany 
    List<B> bList; 
} 

class B{} 

class C extends A{ 

    @OneToMany 
    List<D> dList; 
} 

class D{} 

我對每個@OneToMany關係都使用了延遲加載。

我的要求是使用「Join Fetch」從C中獲取所有數據,因爲我不想在訪問B和D時觸發任何其他數據庫調用。 基本上我想取C,用B和D加載「EAGER 「 類似如下 」SELECT DISTINCT c FROM C c LEFT JOIN cB「

如果這對於JPQL不可行,是否可以通過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(); 

上面的代碼需要調整您的要求。