2016-01-27 17 views
5

Ho generato un DB SQLite con GreenDao v2.1.0. Here is its diagram (a tiny piece of it)In GreenDao, creare una query di join con OR anziché AND

Un contatto può avere molti numeri di telefono. Voglio fare una query di ricerca: elenca tutti i contatti di cui GIVEN_NAME o FAMILY_NAME o PHONE.NUMBER contiene una parola specifica.

Ad esempio, with these entries, se si utilizza la parola "bob" il contatto Sponge Bob verrà restituito. Se uso la parola "222", il contatto Patrick Star verrà restituito.

Dal momento che, due tabelle sono coinvolti nella query, ho fatto ricorso alla soluzione unirsi a questo pezzo di codice:

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(); 

Questo genera il seguente 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 

The 5th punti di linea fuori il problema: il connettore "AND". Sto disperatamente cercando di sostituirlo con un "OR".

Mi manca qualcosa? Devo lasciare la soluzione JOIN? Grazie :)

risposta

1

Ho lo stesso problema. Sembra che Greendao al momento non sia in grado di farlo. Sto ricorrendo invece all'utilizzo di queryRaw().