У меня есть api rest, который возвращает список мест, в которых есть список категорий:
{
"id": "35fds-45sdgk-fsd87",
"name" : "My awesome place",
"categories" : [
{
"id": "cat1",
"name" : "Category 1"
},
{
"id": "cat2",
"name" : "Category 2"
},
{
"id": "cat3",
"name" : "Category 3"
}
]
}
Поэтому, используя модернизацию, я получаю их с удаленного сервера с этими классами моделей:
data class Category(var id: String, var name: String)
data class Place(
var id: String,
var name: String,
var categories: List<Category>
)
Проблема в том, что я хочу, чтобы viewModel всегда извлекал данные из локальной базы данных комнат, возвращая Flowables, и просто запускал действия по обновлению, которые обновят базу данных и, следовательно, представление.
Пример метода DAO:
@Query("select * from Places where placeId = :id")
fun getPlace(id: String): Flowable<Place>
Поэтому я попытался смоделировать эти два класса следующим образом:
@Entity
data class Category(var id: String, var name: String)
@Entity
data class Place(
@PrimaryKey
var id: String,
var name: String,
var categories: List<Category>
)
Но, конечно, Room не может обрабатывать отношения самостоятельно.Я видел этот пост , который просто извлекает из локальной базы данных предыдущий список городов, но этот случай не соответствует этому.
Единственный вариант, о котором я могу подумать, - это сохранить категории в базе данных в виде строки JSON, но при этом теряется реляционное качество базы данных ...
Это кажется довольно распространенным использованием.дело, но я не нашел много информации об этом.