Junior — Middle
Kaip nustatyti ryšį tarp dviejų lentelių duomenų bazėje, naudojančioje Room?
sobes.tech AI
Atsakymas iš AI
Room'e, ryšys tarp dviejų lentelių yra nustatomas naudojant užsienio raktus ir anotacijas, taip pat su specialiomis klasėmis duomenų sujungimui.
-
Užsienio raktas (Foreign Key) — entitete (
Entity) nurodote lauką su anotacija@ForeignKey, kuris nurodo į kitos lentelės pirminį raktą. -
Ryšiai — norint gauti susijusius duomenis, kuriamos POJO klasės su anotacijomis
@Relation, leidžiančiomis gauti įterptus objektus iš susijusių lentelių.
Pavyzdys "vienas prieš daug":
@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 // užsienio raktas
)
// Klasė naudotojo ir jo knygų gavimui
data class UserWithBooks(
@Embedded val user: User,
@Relation(
parentColumn = "userId",
entityColumn = "userOwnerId"
)
val books: List<Book>
)
Šiuo būdu Room automatiškai sujungia lenteles ir leidžia gauti susijusius duomenis per DAO.