gpt4 book ai didi

android - 当列名相同时,如何表示与 Android Room 的 "many to many"关系?

转载 作者:IT老高 更新时间:2023-10-28 13:26:47 26 4
gpt4 key购买 nike

如何表示与 Room 的“多对多”关系?我的列名也一样。

例如我有 GuestReservationReservation 可以有多个 Guest,并且一个 Guest 可以是多个 Reservation 的一部分。

这是我的实体定义:

@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>
)

上面我得到编译器错误:

> Cannot figure out how to read this field from a cursor.

我找不到 @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 列表进行预订。 (不是 guest 对象)

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>
)

由于您可以获得 guestIds 和 reservationIds,您可以查询 ReservationGuest 实体那些。

如果我找到一种简单的方法来获取 Reservation 和 Guest 对象列表而不是它们的 id,我会更新我的答案。

Similar answer

关于android - 当列名相同时,如何表示与 Android Room 的 "many to many"关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44361824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com