Consultas e relacionamentos
Consulte dados e relacione entidades.
Consultas e relacionamentos é uma aula grátis de Android Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Android Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Android Academy inclui 4 aulas no total.
Além de uma única tabela
Aplicativos reais têm dados relacionados: um usuário tem muitas publicações, um pedido tem muitos itens. O Room modela isso com chaves estrangeiras e a anotação @Relation.
Consultas parametrizadas
Passe argumentos para uma @Query usando o prefixo de dois-pontos.
@Query("SELECT * FROM users WHERE name LIKE :search")
suspend fun search(search: String): List<User>Retornando agregações
As consultas podem retornar valores escalares, como contagens.
@Query("SELECT COUNT(*) FROM users")
suspend fun count(): IntDefinindo uma chave estrangeira
Uma entidade filha referencia sua entidade pai com @ForeignKey. Isso impõe a integridade referencial no nível do banco de dados.
@Entity(
foreignKeys = [ForeignKey(
entity = User::class,
parentColumns = ["id"],
childColumns = ["userId"]
)]
)
data class Post(
@PrimaryKey val id: Int,
val userId: Int,
val title: String
)Indexando chaves estrangeiras
O Room recomenda indexar as colunas de chaves estrangeiras para melhorar o desempenho das consultas. Adicione um @Index.
@Entity(
indices = [Index("userId")]
)
data class Post(/* ... */ val userId: Int)Comportamento de onDelete
Decida o que acontece com as entidades filhas quando uma entidade pai é excluída, por exemplo, use CASCADE para excluí-las também.
ForeignKey(
entity = User::class,
parentColumns = ["id"],
childColumns = ["userId"],
onDelete = ForeignKey.CASCADE
)Modelando uma relação um para muitos
Crie uma classe que combine uma entidade pai com suas entidades filhas usando @Embedded e @Relation.
data class UserWithPosts(
@Embedded val user: User,
@Relation(
parentColumn = "id",
entityColumn = "userId"
)
val posts: List<Post>
)Consultando a relação
Retorne a classe combinada a partir de um DAO. O Room executa a consulta adicional e reúne os objetos.
@Transaction
@Query("SELECT * FROM users")
suspend fun getUsersWithPosts(): List<UserWithPosts>Por que usar @Transaction aqui
Como o Room executa duas consultas (primeiro os pais e depois os filhos), envolver o método em @Transaction garante um instantâneo consistente, sem escritas intercaladas.
Relação muitos-para-muitos com uma tabela de junção
Para relações muitos-para-muitos (estudantes e cursos), use uma tabela de junção e o parâmetro associateBy de @Relation.
@Relation(
parentColumn = "studentId",
entityColumn = "courseId",
associateBy = Junction(Enrollment::class)
)
val courses: List<Course>Resumo das relações
@ForeignKeyimpõe regras de integridade e de cascata.@Relation+@Embeddedmontam objetos relacionados.@Transactionmantém consistentes as leituras que fazem várias consultas.
Verificação rápida
Teste sua compreensão sobre relações.
Recapitulação
Você aprendeu:
- Parametrizar consultas com
:namee retornar agregações. @ForeignKeyimpõe a integridade com regrasonDelete.@Relation+@Embeddedconstroem objetos relacionados; envolva as leituras em@Transaction.
Perguntas Frequentes
A aula “Consultas e relacionamentos” é grátis?
Sim — o texto completo de “Consultas e relacionamentos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Android Academy, atualize para CoddyKit PRO. O curso de Android Academy inclui 4 aulas no total.
O que vou aprender em “Consultas e relacionamentos”?
Consulte dados e relacione entidades. Você pratica Android Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Android Academy?
Nenhuma experiência prévia é necessária. Android Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Consultas e relacionamentos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Android Academy?
Sim. Cada aula de Android Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Entidades e DAOs
- A classe de banco de dados Room
- Consultas e relacionamentos
- Observando dados com Flow