Какой самый простой способ сохранить список <object>в базе данных комнат? - PullRequest
0 голосов
/ 28 апреля 2020

Я учусь Android Программирование для начинающих. Я пытаюсь сделать что-то вроде этого:

@Entity(table_name = "family_table")
class Human {

    private String name;
    private int age;

    //Here is my problem
    private List<Human> children = new ArrayList<Human> ();

    public Human(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void haveChildren(String name, int age) {
        children.add(new Human(name,age));
    }

    public String getTitle() {
        return name;
    }

    public int getDescription() {
        return age;
    }

    public int totalChildren() {
        return children.size();
    }

}

Позже из основного класса я хочу использовать этот класс. Например:

public class Test{

    public static void main(String[] args) {
        Human person1 = new Human("Alex",32);

        person1.haveChildren("Jhon",6);
        person1.haveChildren("Abraham",3);

        System.out.println(person1.totalChildren());


    }
}

Комната предоставляет методы для хранения данных, такие как int, Boolean, String и c., Но я не могу хранить пользовательские объекты внутри записей комнаты. Он говорит: Cannot figure out how to save this field into database.You can consider adding a type converter for it.

Я искал inte rnet для решения. Что бы я ни узнал, есть в основном два типа решения.

  1. TypeConverting
  2. Использование @ foreignKeys

Эти два метода помогают понять процесс. Но проблема для 1-го решения заключается в том, что каждый раз, когда я создаю новый дочерний объект (который хранится в переменной List<Human> children), я должен преобразовать этот List<object> в формат JSON (для решения 1) и если я хочу получить данные обратно, я снова конвертирую их в List<object>. Благодаря этому решению, оно кажется очень неэффективным для больших List<object>.

Для решения 2, поскольку я ссылаюсь на объект того же типа, почему я должен создать для него еще одну таблицу (сущность) ? Разве я не могу использовать ту же сущность (family_table для моего примера)?

Если мне нужно создать другую сущность, как я могу это сделать? (Учебное пособие по решению 2 вводит меня в заблуждение как новичка.)

Существует ли какое-либо другое решение в такой ситуации?

...