Vejamos como
@Relation funciona. Existem duas etapas:- A sala executa a consulta que você colocou em
@Querypara 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 (Userno seu caso). - Room executa mais uma consulta. Para isso, veja
@Relationparâmetros e entende qual tabela deve consultar em seguida (Recordno 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 emRecordcampos 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
Recordstable (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
@Relationem 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).