Назад к вопросам
X5 Digital
Junior — Middle
81
Каким образом установить связь между двумя таблицами в базе данных, использующей Room?
Компании, где спрашивали
Ответ от нейросети
sobes.tech 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.