Vejamos como
@Relation
funciona. Existem duas etapas:- A sala executa a consulta que você colocou em
@Query
para obter usuários. Como de costume, essa consulta não inclui nenhuma associação. Esta consulta é usada para obter a parte dos dados que persistem na tabela principal (User
no seu caso). - Room executa mais uma consulta. Para isso, veja
@Relation
parâmetros e entende qual tabela deve consultar em seguida (Record
no seu caso) e qual deve ser a condição de junção com o resultado do usuário. É importante que você não tenha como se intrometer nesse processo de criação de consultas. Você não pode definir o filtro emRecord
campos de, por exemplo. Obtendo o resultado O Room o transforma no formato necessário (preenche a Lista deRecords
).
Você tem escolhas:
- Para mudar a relação para definir filtros em
Records
table (mas com isso você obterá dados simples sem List).
public class UserWithRecords {
@Embedded
protected Record record;
@Relation(
parentColumn = "user_id",
entity = User.class,
entityColumn = "id"
)
protected User user;
}
e para alterar a consulta para:
@Transaction
@Query("SELECT * FROM record_table WHERE date=:date")
public LiveData<List<UserWithRecords>> getDailyRecord(String date);
- Não usar
@Relation
em tudo, escreva a consulta com junções como a que você tentou. Mas então você deve transformar manualmente o resultado para a forma necessária no código (resultado em loop e lista de formação).