Junior — Middle
Jak navázat vztah mezi dvěma tabulkami v databázi používající Room?
sobes.tech AI
Odpověď od AI
V Room je vztah mezi dvěma tabulkami nastaven pomocí cizích klíčů a anotací, stejně jako pomocí speciálních tříd pro spojování dat.
-
Cizí klíč (Foreign Key) — v entitě (Entity) označíte pole anotací
@ForeignKey, které odkazuje na primární klíč jiné tabulky. -
Vztahy — pro získání souvisejících dat se vytvářejí POJO třídy s anotacemi
@Relation, které umožňují získat vložené objekty z propojených tabulek.
Příklad vztahu "jeden ku mnoha":
@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 // cizí klíč
)
// Třída pro získání uživatele s jeho knihami
data class UserWithBooks(
@Embedded val user: User,
@Relation(
parentColumn = "userId",
entityColumn = "userOwnerId"
)
val books: List<Book>
)
Tímto způsobem Room automaticky propojí tabulky a umožní získat související data přes DAO.