Junior — Middle
Ako naviazať vzťah medzi dvomi tabuľkami v databáze používajúcej Room?
sobes.tech AI
Odpoveď od AI
V Room-u je odnos između dveh tabel nastavljen s pomočjo tujih ključev in anotacij, pa tudi s pomočjo posebnih razredov za združevanje podatkov.
-
Tuj ključ (Foreign Key) — v entiteti (Entity) označite polje z anotacijo
@ForeignKey, ki se nanaša na primarni ključ druge tabele. -
Odnosi — za pridobivanje povezanih podatkov se ustvarijo POJO razredi z anotacijami
@Relation, ki omogočajo pridobivanje vdelanih objektov iz povezanih tabel.
Primer odnosa "eden proti mnogim":
@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 // tuja ključ
)
// Razred za pridobivanje uporabnika z njegovimi knjigami
data class UserWithBooks(
@Embedded val user: User,
@Relation(
parentColumn = "userId",
entityColumn = "userOwnerId"
)
val books: List<Book>
)
Na ta način Room samodejno poveže tabele in omogoča pridobivanje povezanih podatkov prek DAO-ja.