Как я могу сохранить вложенный ответ JSON, используя ROOM Android? - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь использовать базу данных 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.

...