在GreenDao中,使用OR而不是AND构建连接查询

Mer*_*lmi 5 sqlite orm android greendao

我使用GreenDao v2.1.0生成了一个SQLite DB. 这是它的图(一小部分)

联系人可以有很多电话号码.我想制作一个搜索查询:列出GIVEN_NAME或FAMILY_NAME或PHONE.NUMBER包含特定字词的所有联系人.

例如,对于这些条目,如果我使用单词"bob",将返回联系人Sponge Bob.如果我使用"222"这个词,将联系Patrick Star联系人.

因为查询中涉及两个表,所以我使用这段代码来使用JOIN解决方案:

    QueryBuilder<Contact> qb = getContactDao(context).queryBuilder();
    qb.whereOr(ContactDao.Properties.Given_name.like("%" + word + "%"),
               ContactDao.Properties.Family_name.like("%" + word + "%"));
    qb.join(Phone.class, PhoneDao.Properties.Contact_id)
      .where(PhoneDao.Properties.Number.like("%" + word + "%"));
    List<Contact> contacts = qb.list();
Run Code Online (Sandbox Code Playgroud)

这会生成以下SQL:

SELECT T."_id", T."GIVEN_NAME", T."FAMILY_NAME"
FROM "CONTACT" T  
JOIN PHONE J1 
ON T."_id"=J1."CONTACT_ID" 
WHERE (T."GIVEN_NAME" LIKE ? OR T."FAMILY_NAME" LIKE ?) AND J1."NUMBER" LIKE ?    
COLLATE LOCALIZED ASC
Run Code Online (Sandbox Code Playgroud)

第5行指出了问题:"AND"连接器.我拼命想用"OR"替换它.

我错过了什么吗?我要离开JOIN解决方案吗?谢谢 :)

Jus*_*ade 1

我也有同样的问题。看来greendao目前还做不到这一点。我正在求助于使用queryRaw()