How can I represent a many to many relation with Android Room?

后端 未结 6 1122
闹比i
闹比i 2020-11-28 02:58

How can I represent a many to many relation with Room? e.g. I have \"Guest\" and \"Reservation\". Reservation can have many Guest and a Guest can be part of many Reservation

6条回答
  •  半阙折子戏
    2020-11-28 03:18

    I had a similar issue. Here is my solution.

    You can use an extra entity (ReservationGuest) which keeps the relation between Guest and 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
    )
    

    You can get reservations with their list of guestIds. (Not the guest objects)

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

    You can also get guests with their list of reservationIds. (Not the reservation objects)

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

    Since you can get the guestIds and reservationIds, you can query Reservation and Guest entities with those.

    I'll update my answer if I find an easy way to fetch Reservation and Guest object list instead of their ids.

    Similar answer

提交回复
热议问题