È una buona pratica usare rawQuery in ContentProvider?

Sto usando il mio ContentProvider personalizzato per comunicare con il database sqlite. Vorrei visualizzare su una lista (usando ListFragment), i dati che provengono da due tabelle (con molti a molti relazione). L’unica soluzione che posso pensare per questo caso è usare rawQuery. E le domande sono, se è una buona pratica, o dovrei risolvere questo in qualche altro modo?

Esempio di tabelle:

Tabella A: ID, COLUMN_FROM_A

Tabella B: ID, COLUMN_FROM_B

Tabella di unione AB: ID, FK_ID_A, FK_ID_B

Esempio di metodo di query sottoposto a override in ContentProvider:

@Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); Cursor cursor = null; int uriType = URIMatcher.match(uri); switch (uriType) { case TABLE_A_URI: queryBuilder.setTables("TABLE_A"); cursor = queryBuilder.query(databaseHelper.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder); break; case TABLE_B_URI: queryBuilder.setTables("TABLE_B"); cursor = queryBuilder.query(databaseHelper.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder); break; case TABLE_JOIN_A_B_URI: cursor = databaseHelper.getReadableDatabase().rawQuery("select a.COLUMN_FORM_A, b.COLUMN_FROM_B from TABLE_A a, TABLE_B b, TABLE_AB ab where ab.FK_ID_A=a.ID and ab.FK_ID_B=b.ID", null); break; default: throw new IllegalArgumentException("Unknown URI"); } cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor; }