0Pricing
Android Academy · Aula

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(): Int

Definindo 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

  • @ForeignKey impõe regras de integridade e de cascata.
  • @Relation + @Embedded montam objetos relacionados.
  • @Transaction manté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 :name e retornar agregações.
  • @ForeignKey impõe a integridade com regras onDelete.
  • @Relation + @Embedded constroem 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

  1. Entidades e DAOs
  2. A classe de banco de dados Room
  3. Consultas e relacionamentos
  4. Observando dados com Flow
← Voltar para Android Academy