Android Room для чтения и записи данных объектов с зависимостями - PullRequest
0 голосов
/ 22 мая 2019

Я пытался сохранить объект в базе данных комнаты и затем извлечь его. Данные, которые мне нужно хранить, представляют собой следующий JSON, полученный из веб-службы:

{
    "id": "456797987",
    "customer": {
        "id": "976851627",
        "firstname": "gdfgfdgfd",
        "lastname": "ftgfd",
    },
    "guests": "4",
    "date": "16-05-2019",
    "room": {
        "id": "02228226",
        "name": "Restaurant"
    },
    "tables": [{
        "name": "2",
        "id": "850531104"
    }],
}

То, что вы видите выше, является оговоркой. Бронирование связано со следующими объектами:

  • Клиент: клиент может иметь несколько бронирований, но в бронировании может быть только один клиент
  • Комната: номер может иметь несколько бронирований, но в бронировании может быть только одна комната
  • Таблица: резервирование может иметь несколько таблиц, а таблица может иметь несколько резервирований.

Я хотел бы просто сохранить этот объект Reservation в базе данных комнаты и получить его позже. Для анализа ответа от веб-службы я использую GSON, поэтому я создал следующие DTO:

data class ReservationDTO(
    val id: String,
    val customer: Customer?,
    val guests: String,
    val date: String,
    val room: Room?,
    val tables: ArrayList<Table>,
)
data class Customer (
    @PrimaryKey @ColumnInfo(name = "id") val id: String,
    @ColumnInfo(name = "firstname") @SerializedName("firstname") val firstName: String,
    @ColumnInfo(name = "lastname") @SerializedName("lasname") val lastName: String
)
data class Room(
    @PrimaryKey @ColumnInfo(name = "id") val id: String,
    @ColumnInfo(name = "name") val name: String
)
data class Table(
    @PrimaryKey @ColumnInfo(name = "id") val id: String,
    @ColumnInfo(name = "name") val name: String
)

Чтобы сохранить резервирование, я создал следующую сущность резервирования:

@Entity(
    foreignKeys = arrayOf(
        ForeignKey(
            entity = Customer::class,
            parentColumns = arrayOf("id"),
            childColumns = arrayOf("customer_id"),
            onDelete = ForeignKey.NO_ACTION
        ),
        ForeignKey(
            entity = Room::class,
            parentColumns = arrayOf("id"),
            childColumns = arrayOf("room_id"),
            onDelete = ForeignKey.NO_ACTION
        )
    ),
    indices = arrayOf(
        Index(value = arrayOf("customer_id"), unique = true),
        Index(value = arrayOf("room_id"), unique = true)
    )
)
data class Reservation(
    @PrimaryKey @ColumnInfo(name = "id") val id: String,
    @ColumnInfo(name = "customer_id") val customerId: String,
    @ColumnInfo(name = "guests") val guests: String,
    @ColumnInfo(name = "date") val date: String,
    @ColumnInfo(name = "room_id") val roomId: String,
)

И после сущности JOIN для таблицы «многие ко многим» <-> бронирования

@Entity(
    tableName = "reservation_table_join",
    primaryKeys = arrayOf("reservation_id", "table_id"),
    foreignKeys = arrayOf(
        ForeignKey(
            entity = Reservation::class,
            parentColumns = arrayOf("id"),
            childColumns = arrayOf("reservation_id")
        ),
        ForeignKey(
            entity = Table::class,
            parentColumns = arrayOf("id"),
            childColumns = arrayOf("table_id")
        )
    ),
    indices = arrayOf(
        Index(value = arrayOf("reservation_id"), unique = true),
        Index(value = arrayOf("table_id"), unique = true)
    )
)
data class ReservationTableJoin(
    @ColumnInfo(name = "reservation_id") val reservationId: String,
    @ColumnInfo(name = "table_id") val tableId: String
)

Я новичок в ROOM и, похоже, не понимаю, как мне это делать. Есть ли более простой способ, чем я делаю? Что мне нужно сделать, чтобы завершить свое решение? Как должен выглядеть мой DAO, если я хочу получить сохраненные данные, используя вышеуказанные объекты?

Заранее спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...