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

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

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