Sobes.tech
Junior — Middle

Hoe maak je een relatie tussen twee tabellen in een database die Room gebruikt?

sobes.tech AI

Antwoord van AI

In Room wordt de relatie tussen twee tabellen vastgesteld met behulp van buitenlandse sleutels en annotaties, evenals met speciale klassen voor het samenvoegen van gegevens.

  1. Buitenlandse sleutel (Foreign Key) — in de entiteit (Entity) geef je een veld aan met de annotatie @ForeignKey, dat verwijst naar de primaire sleutel van een andere tabel.

  2. Relaties — om gerelateerde gegevens te verkrijgen, maken we POJO-klassen met annotaties @Relation, die het mogelijk maken om geneste objecten uit gerelateerde tabellen te krijgen.

Voorbeeld van een "één tot veel" relatie:

@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 // buitenlandse sleutel
)

// Klasse om de gebruiker met zijn boeken op te halen
data class UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

Op deze manier verbindt Room automatisch de tabellen en stelt het je in staat om gerelateerde gegevens op te halen via de DAO.