Обработка ForeignCollection при ручной инициализации родительского объекта

Я разработал модель с двумя объектами: ParentEntity и ChildEntity. Я использую OrmLite для хранения их в базе данных.

На самом деле я получаю свои данные из удаленного веб-сервиса. Это процесс, который у меня есть:

  1. Запрос веб-сервиса (с использованием модификации)
  2. Получить строку JSON в ответ
  3. Строка JSON анализируется Gson в модель JSON (еще раз спасибо за модификацию :))
  4. Я конвертирую модель JSON в модель OrmLite (библиотеки нет, делаю сам)
  5. Модель OrmLite возвращается к обратному вызову в ожидании ответа на запрос.
  6. Обратный вызов отвечает за вызов DAO для фактического сохранения данных.

Этот процесс отлично работает для простых объектов. Но проблема возникает, когда я пытаюсь управлять более сложными объектами, например, с ForeignCollection. На самом деле я не могу выполнить шаг 4, потому что не могу создать новый ForeignCollection, чтобы поместить в него свои дочерние объекты.

Я нашел несколько ответов, в которых говорилось, что я должен хранить каждого ребенка самостоятельно, но это нарушит шаг 6 моего рабочего процесса.

Итак, вопрос:

Как я могу инициализировать ForeignCollection перед получением объекта из базы данных?

Я мог бы найти способ изменить рабочий процесс. Но это всего лишь своего рода «обходной путь», и для этого будут созданы объекты-контейнеры...

Схема OrmLite (упрощенная)

(У класса Entity есть только свойство id и его геттер/сеттер.)

Родительский объект

@DatabaseTable(daoClass = ParentEntityDao.class)
public class ParentEntity extends Entity
{
    @ForeignCollectionField(eager = true)
    private ForeignCollection<TimesheetEntry> entries;

    public Collection<TimesheetEntry> getEntries()
    {
        if(entries != null)
        {
            return Collections.unmodifiableCollection(entries);
        }
        else
        {
            return Collections.unmodifiableCollection(new ArrayList<TimesheetEntry>());
        }
    }

    public void addEntry(ChildEntry childEntry)
    {
        childEntry.setParent(this);
        entries.add(childEntry);
    }

    public void removeEntry(ChildEntry childEntry)
    {
        entries.remove(childEntry);
    }
}

Дочерняя сущность

@DatabaseTable(daoClass = ChildEntityDao.class)
public class ChildEntry extends Entity
{
    @DatabaseField(foreign = true, canBeNull = false)
    private ParentEntity parentEntity;

    public void setParentEntity(ParentEntity parentEntity)
    {
        this.parentEntity = parentEntity;
    }

    public ParentEntity getParentEntity()
    {
        return parentEntity;
    }
}

Схема JSON (упрощенная)

Родительский объект

public class JsonParentEntity
{
    private List<JsonChildEntity> entries;

    // Getter/setter
}

Дочерний объект

public class JsonChildEntity
{
    private String name;

    // Getter/setter
}

person mithrop    schedule 19.11.2015    source источник
comment
Вы можете проверить этот ответ: stackoverflow.com/a/20907285/3901000   -  person m.myalkin    schedule 16.11.2018