Sobes.tech
Junior — Middle

Comment établir une relation entre deux tables dans une base de données utilisant Room?

sobes.tech IA

Réponse de l'IA

Dans Room, la relation entre deux tables est établie à l'aide de clés étrangères et d'annotations, ainsi que par des classes spéciales pour combiner les données.

  1. Clé étrangère (Foreign Key) — dans l'entité (Entity), vous indiquez un champ avec l'annotation @ForeignKey, qui fait référence à la clé primaire d'une autre table.

  2. Relations — pour obtenir des données liées, on crée des classes POJO avec des annotations @Relation, qui permettent d'obtenir des objets imbriqués des tables liées.

Exemple de relation "un à plusieurs":

@Entity
données classe User(
    @PrimaryKey val userId: Int,
    val name: String
)

@Entity(
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["userId"],
        childColumns = ["userOwnerId"],
        onDelete = ForeignKey.CASCADE
    )]
)
données classe Book(
    @PrimaryKey val bookId: Int,
    val title: String,
    val userOwnerId: Int // clé étrangère
)

// Classe pour obtenir l'utilisateur avec ses livres
données classe UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

Ainsi, Room reliera automatiquement les tables et permettra d'obtenir des données liées via le DAO.