Intereting Posts
Закройте приложение и удалите из последних приложений / Использование сохраненных данных проверки подлинности Dropbox на Android Как загрузить файл сопоставления в Firebase? Как получить доступ к переменным активности из фрагмента Android Facebook Android SDK 4.0: newGraphPathRequest возвращает «Активный токен доступа должен использоваться для запроса информации о текущем пользователе». Значения-21, значения-22 или значения-xx исчезли после Android Studio 1.0 Android: есть ошибка, когда я нажимаю на свой editText Android Получить группу контактов по ID Карта Google для андроида Ящики для планшета Android Использует ли Firefox для Android хранилище сертификатов устройств? Почему Android не появляется в настройках Eclipses? Мгновенный запуск Android studio 2.2 Я никогда не получаю hotswap всегда перезапускать и изменение типа поля уведомления Измените цвет курсора EditText в Android 3.0 Android: редкое и невоспроизводимое ClassNotFoundException

Как я могу представить отношение многих к многим с 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 .

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

    Вы можете использовать дополнительный объект ( 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 с ними.

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

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