2016-03-21 16 views
0

Supose我有一個包含酒吧列表的對象Foo。 如果我在Criteria的Bar類上創建了一個別名,我只會收到實際上有Bars的項目。現在休眠獲取沒有孩子的項目

criteria.createAlias("bars", "bars"); 

,如果我想有全部有沒有酒吧的FOOS,我會創造我的別名帶LEFT OUTER JOIN。

criteria.createAlias("bars", "bars", JoinType.LEFT_OUTER_JOIN); 

現在,我的Foo班有大量的孩子(有孩子,有孩子......)。我現在不得不將LEFT_OUTER_JOIN全部或有其他解決方案,以便我的列表完整,而不僅僅是包含帶適當孩子的Foos的列表?

+0

使用左外連接並不意味着你只能得到那些沒有孩子,但你得到他們_好well_。您必須添加另一個條件,即count(children)= 0或children = null(或類似)。 – Thomas

+0

正是我想要的。我希望有和沒有孩子的人。所以唯一的解決辦法是留下外部加入他們呢? –

+0

可能是的,雖然我不知道標準,但我想你必須在所有連接上指定連接類型(除了連接)。如果在查詢中有多個連接,那麼除了限制只有子節點的用戶外,它們可能還有其他目的。如果這是唯一的原因,你刪除,你可能想要刪除一般的聯接。 – Thomas

回答

0

最後,我通過對每個孩子做一個左外連接來解決這個問題。

criteria.createAlias("bars", "bars", JoinType.LEFT_OUTER_JOIN);