Android GreenDao 深查詢 n:m 的關係

來源:互聯網
上載者:User

標籤:編輯   ons   from   col   tac   []   list   desc   dao   

在我的應用程式這樣設計的關係:和我想選擇至少一個使用者作為一個朋友的所有聊天。

基本上,我想要執行以下查詢:\

SELECT c.* FROM CHAT c, USER u, UserChats uc   WHERE c.type = myType   AND u.isFriend = 1   AND c.id = uc.chatId   AND u.id = uc.userId

我沒設法找到了 GreenDao 庫中執行這方式,希望有人能夠幫我這。

編輯:
這是我到現在有:

List<UsersChats> list = usersChatsDao.queryDeep(    "WHERE T0." + UserDao.Properties.isFriend.collumnName + " = ? "+    "AND T1." + ChatDao.Properties.type.collumName + " = ?",    new String[] {"1", myType});if(list != null && list.isEmpty() == false) {    List<Chat> chats = new ArrayList<Chat>();    for(UsersChats link : list) {        chats.add(link.getChat());    }}
解決方案 1:

因為 grrendao 不會執行 QueryBuilder.join() -目前的方法,我認為您的解決方案是你現在能找到的最好的一個,它在內部使用的聯結。

有只小缺點給它:

  • 您可能會查詢更多的表比你實際需要
  • 你要遍曆一個潛在的巨大的列表
  • 您不能使用listLazy()

另一種方法是使用一些像這樣的查詢 (假定 IsFriend 是 int-column 和 myType 適合到 ChatDao.Properties.type :

Query<Chat> qc = chatDao.queryRawCreate(      " LEFT JOIN "+UserChatsDao.TABLENAME+" UC"+      " ON T."+ChatDao.Properties.id.columnName+"=UC."+UserChats.Properties.chatId.columnName+      " LEFT JOIN "+UserDao.TABLENAME+" U"+      " ON UC."+UserChats.Properties.userId.columnName+"=U."UserDao.Properties.id.columnName+      " WHERE U."UserDao.Properties.isFriend.columnName+"=?"+      " AND T."+ChatDao.Properties.type.columnName+"=?", 1, myType);

或者 (大概少效能等):

Query<Chat> qc = chatDao.queryRawCreate(      " , "+UserChatsDao.TABLENAME+" UC"+      " , "+UserDao.TABLENAME+" U"+      " WHERE T."+ChatDao.Properties.type.columnName+"=?"+      " AND U."+UserDao.Properties.isFriend.columnName+"=?"+      " AND T."+ChatDao.Properties.id.columnName+"=UC."+UserChats.Properties.chatId.columnName+      " AND U."UserDao.Properties.id.columnName+"=UC."+UserChats.Properties.userId.columnName, myType, 1);

然後您可以使用所需的 list() -方法:

qc.list();qc.listLazy();...

 

Android GreenDao 深查詢 n:m 的關係

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.