Обработка ForeignCollection при ручной инициализации родительской сущности
Я разработал модель с двумя объектами: ParentEntity
а также ChildEntity
, Я использую OrmLite для хранения их в базе данных.
Я фактически получаю свои данные от удаленного веб-сервиса. Это процесс, который у меня есть:
- Запрос веб-службы (с использованием дооснащения)
- Получить строку JSON в ответ
- Строка JSON анализируется в модели JSON компанией Gson (еще раз спасибо за модернизацию:))
- Я конвертирую модель JSON в модель OrmLite (нет библиотеки, я делаю это сам)
- Модель OrmLite возвращается к обратному вызову, ожидающему ответа на запрос
- Обратный вызов отвечает за вызов 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
}