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.
-
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. -
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.