Я пытаюсь использовать базу данных ROOM, и у меня есть вложенный JSON, как показано ниже,
{
company_id: “”
employees : [
{
employee_id: “”
company_id: “”
adresses: [
{
address_id: “”
employee_id: “”
},
{
address_id: “”
employee_id: “”
}
]
},
{
employee_id: “”
company_id: “”
adresses: [
{
address_id: “”
employee_id: “”
},
{
address_id: “”
employee_id: “”
}
]
}
]
}
Я пытаюсь сохранить объект Company, используя ROOM.
Я прочитал много статей и ответов на подобные вопросы, но я не получил удовлетворительного ответа для реализации этого.
Я знаю о аннотации @Embedded, которая будет полезна, если у класса есть объект другого класса, который может быть встроен в ту же сущность, а ROOM создает дополнительные столбцы для встроенного класса.
Я также знаю о TypeConverters, которые помогают в сохранении списка других объектов. Но что, если у этого вложенного класса есть другой список объектов, как в моем примере, у Компании есть Список, а у Сотрудника есть Список.
Если я не ошибаюсь, я могу использовать концепцию ForeignKey для такой ситуации. Но я не уверен, что если я попытаюсь получить данные для компании, будут ли возвращенные вложенные списки возвращены с объектом Company, или мне придется запросить другие списки отдельно и добавить их в объект Company, прежде чем возвращать их для использования.
Ниже приведена структура классов, которую я имею.
data class Company(
//Other data…
var employees : List<Employee>? = null
)
data class Employee(
//Other data…
var adresses : List<Address>? = null
)
data class Address(
//Other data…
)
Буду признателен за любую помощь, касающуюся сохранения таких данных в ROOM и их извлечения. Заранее спасибо.
РЕДАКТИРОВАТЬ: Решено
Я решил свою проблему, я использовал Typeconverters для своих внутренних вложенных списков. И я могу сохранить и восстановить родительский объект в целом. Спасибо всем, что нашли время, чтобы проверить мою заботу. Ниже, как я это сделал,
@Entity(tableName = "company_table")
data class Company(
//Other data…
@TypeConverters(EmployeeTypeConverter::class)
var employees : List<Employee>? = null
)
data class Employee(
//Other data…
@TypeConverters(AddressTypeConverter::class)
var adresses : List<Address>? = null
)
data class Address(
//Other data…
)
Примечание:
Не забудьте пометить классы Employee и Address с помощью @ Entity.