Sobes.tech
Junior — Middle

Como estabelecer uma relação entre duas tabelas numa base de dados que utiliza Room?

sobes.tech IA

Resposta da IA

No Room, a relação entre duas tabelas é estabelecida através de chaves estrangeiras e anotações, bem como com classes especiais para combinar dados.

  1. Chave estrangeira (Foreign Key) — na entidade (Entity), indica-se um campo com a anotação @ForeignKey, que faz referência à chave primária de outra tabela.

  2. Relações — para obter dados relacionados, criam-se classes POJO com anotações @Relation, que permitem obter objetos aninhados de tabelas relacionadas.

Exemplo de relação "um para muitos":

@Entity
dados classe User(
    @PrimaryKey val userId: Int,
    val name: String
)

@Entity(
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["userId"],
        childColumns = ["userOwnerId"],
        onDelete = ForeignKey.CASCADE
    )]
)
dados classe Book(
    @PrimaryKey val bookId: Int,
    val title: String,
    val userOwnerId: Int // chave estrangeira
)

// Classe para obter o usuário com seus livros
dados classe UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

Dessa forma, o Room conecta automaticamente as tabelas e permite obter dados relacionados através do DAO.