1

我设计了一个包含两个实体的模型:ParentEntityChildEntity。我使用 OrmLite 将它们存储在数据库中。

我实际上是从远程 Web 服务获取数据。这是我的过程:

  1. 请求网络服务(使用改造)
  2. 获取 JSON 字符串作为响应
  3. JSON 字符串由 Gson 解析为 JSON 模型(再次感谢改造 :))
  4. 我将 JSON 模型转换为 OrmLite 模型(没有库,我自己制作)
  5. OrmLite模型返回给等待请求响应的回调
  6. 回调负责调用 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
}
4

0 回答 0