Я пытался сохранить объект в базе данных комнаты и затем извлечь его. Данные, которые мне нужно хранить, представляют собой следующий 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, если я хочу получить сохраненные данные, используя вышеуказанные объекты?
Заранее спасибо за помощь!