我怎样才能代表与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
)来保持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
的列表进行预订。 (不是客人对象)
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> )
由于您可以获取guestId
和reservationId
,因此您可以查询Reservation
和Guest
实体。
我会更新我的答案,如果我找到一个简单的方法来获取保留和访客对象列表,而不是他们的ID。
类似的答案