Sobes.tech
Junior — Middle

Как да установите връзка между две таблици в база данни, използваща Room?

sobes.tech AI

Отговор от AI

В Room връзката между две таблици се установява чрез външни ключове и анотации, както и чрез специални класове за обединяване на данни.

  1. Външен ключ (Foreign Key) — в същността (Entity) посочвате поле с анотация @ForeignKey, което се отнася към първичния ключ на друга таблица.

  2. Връзки — за получаване на свързани данни се създават 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.