Veamos cómo @Relation obras. Hay dos etapas:
- Room ejecuta la consulta que has puesto en
@Querypara conseguir usuarios. Como de costumbre, esa consulta no incluye ningún Join. Esta consulta se utiliza para obtener esa parte de los datos que se conservan en la tabla principal (Useren su caso). - Room ejecuta una consulta más. Para eso mira
@Relationparámetros y entiende qué tabla debe consultar a continuación (Recorden su caso) y cuál debería ser la condición de unión con el resultado del usuario. Es importante que no tenga forma de entrometerse en este proceso de creación de consultas. No puede configurar el filtro enRecordlos campos de , por ejemplo. Obtener el resultado Room lo transforma en el formato necesario (llena la Lista deRecords).
Tiene opciones:
- Para cambiar la relación para establecer filtros en
Recordstabla (pero con eso obtendrá datos planos sin Lista).
public class UserWithRecords {
@Embedded
protected Record record;
@Relation(
parentColumn = "user_id",
entity = User.class,
entityColumn = "id"
)
protected User user;
}
y para cambiar la consulta a:
@Transaction
@Query("SELECT * FROM record_table WHERE date=:date")
public LiveData<List<UserWithRecords>> getDailyRecord(String date);
- No usar
@Relationen absoluto, escribe una consulta con uniones como las que has probado. Pero luego debe transformar manualmente el resultado a la forma necesaria en el código (resultado de bucle y lista de formación).