Intereting Posts
Разница между таймером и будильником Как минимизировать появление GC_FOR_ALLOC? Есть ли способ установить параметр базового запроса для включения в каждый запрос, сделанный с помощью библиотеки Square's Retrofit? Java: как проверить, является ли объект нулевым? Как создать эмулятор Android в командной строке с параметрами? Создание прокрутки TextView на Android Передайте данные реферера через хром, чтобы играть в Google Как создать индикатор горизонтальной загрузки? Android: как создать представление, чтобы заполнить свободное пространство? Как измерить и улучшить использование батареи в iPhone / iPad (Android также) Настройка текстового шрифта кнопки в android Показать значок в панели действий / панели инструментов с помощью AppCompat-v7 21 Как проверить системную версию Android? FirebaseRemoteConfig.fetch () не запускает OnCompleteListener каждый раз Как объединить несколько spannable объектов?

Как я могу представить отношение многих к многим с Android Room?

Как я могу представить отношение многих к многим с комнатой? Например, у меня есть «Гость» и «Бронирование». В резервировании может быть много гостей, а гость может быть частью многих резерваций.

Вот мои определения сущностей:

@Entity data class Reservation( @PrimaryKey val id: Long, val table: String, val guests: List<Guest> ) @Entity data class Guest( @PrimaryKey val id: Long, val name: String, val email: String ) 

Изучая документы, я наткнулся на @Relation . Тем не менее, я нашел это действительно запутанным.

В соответствии с этим я хотел бы создать POJO и добавить туда отношения. Итак, с моим примером я сделал следующее

 data class ReservationForGuest( @Embedded val reservation: Reservation, @Relation( parentColumn = "reservation.id", entityColumn = "id", entity = Guest::class ) val guestList: List<Guest> ) 

Свыше я получаю ошибку компилятора:

Не могу понять, как читать это поле из курсора.

Я не смог найти рабочий образец @Relation .

Solutions Collecting From Web of "Как я могу представить отношение многих к многим с Android Room?"

У меня была аналогичная проблема. Вот мое решение.

Вы можете использовать дополнительный объект ( ReservationGuest ), который сохраняет связь между Guest и Reservation .

 @Entity data class Guest( @PrimaryKey val id: Long, val name: String, val email: String ) @Entity data class Reservation( @PrimaryKey val id: Long, val table: String ) @Entity data class ReservationGuest( @PrimaryKey(autoGenerate = true) val id: Long, val reservationId: Long, val guestId: Long ) 

Вы можете получить резервирование со своим списком guestId s. (Не гостевые объекты)

 data class ReservationWithGuests( @Embedded val reservation:Reservation, @Relation( parentColumn = "id", entityColumn = "reservationId", entity = ReservationGuest::class, projection = "guestId" ) val guestIdList: List<Long> ) 

Вы также можете получить гостей с их списком reservationId . (Не объекты резервирования)

 data class GuestWithReservations( @Embedded val guest:Guest, @Relation( parentColumn = "id", entityColumn = "guestId", entity = ReservationGuest::class, projection = "reservationId" ) val reservationIdList: List<Long> ) 

Поскольку вы можете получить guestId s и reservationId s, вы можете запросить объекты Reservation и Guest с ними.

Я обновлю свой ответ, если найду простой способ получить список объектов резервирования и гостевых объектов вместо своих идентификаторов.

Похожие ответы