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

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

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

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

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

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

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

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

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

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

(Класс Entity просто есть собственность id и его получатель / установщик.)

ParentEntity

@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);
    }
}

ChildEntity

@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
}

0 ответов

Другие вопросы по тегам