我怎样才能代表与Android室的多对多关系?

我怎样才能代表与房间的多对多关系? 例如我有“客人”和“保留”。 预订可以有许多客人和一位客人可以成为许多预订的一部分。

这是我的实体定义:

@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 )来保持GuestReservation之间的关系。

 @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的列表进行预订。 (不是客人对象)

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

您也可以获得reservationId ID列表的reservationId 。 (不是保留对象)

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

由于您可以获取guestIdreservationId ,因此您可以查询ReservationGuest实体。

我会更新我的答案,如果我找到一个简单的方法来获取保留和访客对象列表,而不是他们的ID。

类似的答案