Junior — Middle
Как да установите връзка между две таблици в база данни, използваща Room?
sobes.tech AI
Отговор от AI
В Room връзката между две таблици се установява чрез външни ключове и анотации, както и чрез специални класове за обединяване на данни.
-
Външен ключ (Foreign Key) — в същността (Entity) посочвате поле с анотация
@ForeignKey, което се отнася към първичния ключ на друга таблица. -
Връзки — за получаване на свързани данни се създават POJO класове с анотации
@Relation, които позволяват да се получат вложени обекти от свързаните таблици.
Пример за връзка "един към много":
@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 // външен ключ
)
// Клас за получаване на потребителя с неговите книги
data class UserWithBooks(
@Embedded val user: User,
@Relation(
parentColumn = "userId",
entityColumn = "userOwnerId"
)
val books: List<Book>
)
По този начин Room автоматично ще свърже таблиците и ще позволи да се получат свързани данни чрез DAO.