Я получил json от службы отдыха, которая состоит из нескольких человек, у каждого из которых есть список идентификаторов, ссылающихся на некоторые навыки, а у каждого есть список идентификаторов, ссылающихся на некоторые типы навыков:
{
"person": [{
"id": 1,
"name": "Biatrix",
"age": 29,
"skillIndices": [
1,
2
]
},
{
"id": 2,
"name": "Oren",
"age": 27,
"skillIndices": [
1,
2
]
},
{
"id": 3,
"name": "Bill",
"age": 52,
"skillIndices": [
1,
2
]
}
],
"skill": [{
"id": 1,
"name": "Sword",
"typeIndices": [
1,
2
]
},
{
"id": 2,
"name": "Kong fu",
"typeIndices": [
3,
4
]
}
],
"type": [{
"id": 1,
"name": "Hattori"
},
{
"id": 2,
"name": "Hanzō"
},
{
"id": 3,
"name": "Shaolin"
},
{
"id": 4,
"name": "Tai Chi Quan"
}
]
}
Для сохранения этих данных в базе данных Room у меня есть три сущности и три дао.
Мне нужно каким-то образом преобразовать идентификаторы в реальные объекты, чтобы при извлечении данных в виде LiveData из моего репозитория я получал нечто подобное, которое я мог бы использовать в своем пользовательском интерфейсе :
{
"person": [{
"id": 1,
"name": "Biatrix",
"age": 29,
"skills": [
[{
"id": 1,
"name": "Sword",
"types": [
"Hattori",
"Hanzō"
]
},
{
"id": 2,
"name": "Kong fu",
"types": [
"Shaolin",
"Tai Chi Quan"
]
}
]
},
{
"id": 2,
"name": "Oren",
"age": 27,
"skills": [
[{
"id": 1,
"name": "Sword",
"types": [
"Hattori",
"Hanzō"
]
},
{
"id": 2,
"name": "Kong fu",
"types": [
"Shaolin",
"Tai Chi Quan"
]
}
]
},
{
"id": 3,
"name": "Bill",
"age": 52,
"skills": [
[{
"id": 1,
"name": "Sword",
"types": [
"Hattori",
"Hanzō"
]
},
{
"id": 2,
"name": "Kong fu",
"types": [
"Shaolin",
"Tai Chi Quan"
]
}
]
}
]
}
Конечно, это (?) Должно происходить в классе Entity как Pojo, верно? Пытался сделать это с помощью аннотации @Relation
, но, похоже, не понимает, как это сделать.
Вот сущность для Person
:
package com.myapp.data.db.entity
import androidx.room.*
@Entity(tableName = "person")
data class Person(
@PrimaryKey(autoGenerate = false)
var id: Int = 0,
var name: String = 0,
var age: Int = 0,
var skillIndices: List<Int> = arrayListOf()
)
Как мне манипулировать этим объектом, чтобы при запросе данных Person
я получал что-то вроде вышеуказанного (второго) набора данных?