Sobes.tech
Назад к вопросам
Junior — Middle
81

Каким образом установить связь между двумя таблицами в базе данных, использующей Room?

Компании, где спрашивали
X5 DigitalX5 Digital

Ответ от нейросети

sobes.tech 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.