我怎样才能代表与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 。 我发现它真的很混乱。

根据这个我想创build一个POJO并在那里添加关系。 所以,以我的例子,我做了以下

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

与上面我得到编译器错误:

无法弄清楚如何从光标读取这个字段。

我无法find@Relation的工作示例。

Solutions Collecting From Web of "我怎样才能代表与Android室的多对多关系?"

我有一个类似的问题。 这是我的解决scheme。

您可以使用一个额外的实体( 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实体。

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

类似的答案

基于上面的答案: https : //stackoverflow.com/a/44428451/4992598只有通过保持实体之间的单独的字段名称,您可以返回模型(不仅仅是ID)。 所有你需要做的是:

 @Entity data class ReservationGuest( @PrimaryKey(autoGenerate = true) val id: Long, val reservationId: Long, @Embedded val guest: Guest ) 

只要不保留重复的字段,是可以将实体embedded到另一个实体中。 因此,ReservationWithGuests类可以看起来像这样。

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

所以在这一点上,您可以使用val guestIdList:List,因为您的ReservationGuest实体实际上将id与实体模型进行映射。