Sobes.tech
Junior — Middle

¿Cómo establecer una relación entre dos tablas en una base de datos que utiliza Room?

sobes.tech AI

Respuesta de la IA

En Room, la relación entre dos tablas se establece mediante claves externas y anotaciones, así como con clases especiales para combinar datos.

  1. Clave externa (Foreign Key) — en la entidad (Entity) se indica un campo con la anotación @ForeignKey, que hace referencia a la clave primaria de otra tabla.

  2. Relaciones — para obtener datos relacionados, se crean clases POJO con anotaciones @Relation, que permiten obtener objetos anidados de tablas relacionadas.

Ejemplo de relación "uno a muchos":

@Entity
data class User(
    @PrimaryKey val userId: Int,
    val name: String
)

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

// Clase para obtener el usuario con sus libros
data class UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

De esta forma, Room enlazará automáticamente las tablas y permitirá obtener datos relacionados a través del DAO.