2015-12-14 50 views
3

我想選擇實體一個同時通過實體加盟兩種在實體限制它們在性質C加入了兩個關係在greenDao 2.1.0

{_id} < - {_id,A_ID,C_ID} - >ç {_id,XY}

這是我到目前爲止的代碼:

QueryBuilder<A> queryA = aDao.queryBuilder(); 
Join<A,B> joinAB = queryA.join(B.class, BDao.Properties.A_Id); 

queryA.join(joinAB, BDao.Properties.C_id, C.class, CDao.Properties.Id) 
      .where(CDao.Properties.xy.eq("stuff")) 

在最後行的編譯器需要一個Join<?,A>代替Join<A,B>,我不知道我應該如何鏈上的兩個連接爲它工作。

如果我從BI查詢開始,可以將連接添加到C並分配限制,但是我只會從那裏加載B和延遲加載A,這不是很好,或者是深度加載B這也拉C,這也不是很好。

從文檔中我得到的印象是這種加入鏈接是可能的,但我不確定我的錯誤在哪裏。

+0

您是否找到解決方案?同樣的問題 – deviant

+0

我還沒有找到解決方案,但也沒有看起來很難,只是使用SQL查詢這個特定的問題。 –

回答

1

如果我正確理解你試圖達到的目標,你所做的是正確的,但在創建連接時不需要指定<A,B>。 這應該工作:

QueryBuilder<A> queryA = aDao.queryBuilder(); 
Join joinAB = queryA.join(B.class, BDao.Properties.A_Id); 
Join joinBC = queryA.join(joinAB, BDao.Properties.C_Id, C.class, CDAo.Properties.Id); 
joinBC.where(CDao.Properties.xy.eq("stuff"); 
List<A> listA = queryA.list(); 
+0

這只是沒有工作。你應該指定類型參數 – deviant