我设计了一个包含两个实体的模型:ParentEntity
和ChildEntity
。我使用 OrmLite 将它们存储在数据库中。
我实际上是从远程 Web 服务获取数据。这是我的过程:
- 请求网络服务(使用改造)
- 获取 JSON 字符串作为响应
- JSON 字符串由 Gson 解析为 JSON 模型(再次感谢改造 :))
- 我将 JSON 模型转换为 OrmLite 模型(没有库,我自己制作)
- OrmLite模型返回给等待请求响应的回调
- 回调负责调用 DAO 来实际存储数据
此过程非常适用于简单实体。但是当我尝试管理更复杂的实体时会出现一个问题ForeignCollection
,例如。实际上,我无法实现第 4 步,因为我无法创建一个新ForeignCollection
的来将我的子实体放入其中。
我发现一些答案说我应该自己存储每个孩子,但这会破坏我工作流程的第 6 步。
所以问题是:
在从数据库中获取对象之前如何初始化ForeignCollection
?
我可以找到改变工作流程的方法。但这只是一种“解决方法”,将创建容器对象只是为了实现这一点......
OrmLite 模式(简化)
(该类Entity
只有一个属性id
及其 getter/setter。)
父实体
@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
}