Sobes.tech
Junior — Middle

Hogyan lehet kapcsolatot létesíteni két tábla között egy Room-ot használó adatbázisban?

sobes.tech MI

Válasz az MI-től

A Room-ban két tábla közötti kapcsolatot külső kulcsok és annotációk segítségével, valamint speciális osztályokkal lehet létrehozni az adatok összekapcsolására.

  1. Külső kulcs (Foreign Key) — az entitásban (Entity) megadod egy mezőt az @ForeignKey annotációval, amely egy másik tábla elsődleges kulcsára hivatkozik.

  2. Kapcsolatok — a kapcsolódó adatok lekéréséhez POJO osztályokat hozol létre @Relation annotációval, amelyek lehetővé teszik a beágyazott objektumok lekérését a kapcsolódó táblákból.

Példa "egy a sokhoz" kapcsolat:

@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 // külső kulcs
)

// Osztály a felhasználó és könyvei lekéréséhez
data class UserWithBooks(
    @Embedded val user: User,
    @Relation(
        parentColumn = "userId",
        entityColumn = "userOwnerId"
    )
    val books: List<Book>
)

Így a Room automatikusan összekapcsolja a táblákat, és lehetővé teszi a kapcsolódó adatok lekérését a DAO-n keresztül.