2014-01-11 48 views
0

我在JPQL級聯查詢與eclipselink2.5的EclipseLink JPQL級聯查詢probleam

問題,請參閱代碼

實體代碼

public class Category{ 
... 
    @JoinColumn(name = "parent_category", referencedColumnName = "id")  
    @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER,optional = true)  
    private Category parentCategory; 
... 

}

JPQL代碼

String jpql = "select o from Category o order by o.parentCategory.sort ASC"; 

問題

的問題是這樣的JPQL返回列表並不包括「O」如果「o.parentCategory」爲空。

請參閱本表http://i.stack.imgur.com/xsXvk.jpg

the return list only rows id is 2,3,4 . 

because the column parent_category is null, I lost rows 1,5,6 

the correct result should be return all rows 

Looking forward to your help! 

回答

0

順序使用o.parentCategory.sort by子句迫使內部聯接,其過濾空。如果你想空在內,你將需要使用一個明確的外部聯接查詢:

"select o from Category o outer join o.parentCategory parentCategory order by parentCategory.sort ASC" 
+0

感謝你的幫助,但如果使用外部聯接喜歡你的代碼,我收到錯誤消息「的OutOfMemoryError:Java堆空間」 –

+0

我不明白爲什麼查詢會導致一個oom異常。嘗試使用左連接而不是外連接,並檢查生成的SQL是否到達目的地,並且它返回您期望的結果數量。 – Chris