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.
-
Külső kulcs (Foreign Key) — az entitásban (
Entity) megadod egy mezőt az@ForeignKeyannotációval, amely egy másik tábla elsődleges kulcsára hivatkozik. -
Kapcsolatok — a kapcsolódó adatok lekéréséhez POJO osztályokat hozol létre
@Relationannotá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.