手动初始化父实体时处理ForeignCollection

时间:2015-11-19 10:41:15

标签: android ormlite foreign-collection

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

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

  1. 请求网络服务(使用改造)
  2. 获取响应中的JSON字符串
  3. GSON将JSON字符串解析为JSON模型(再次感谢改造:))
  4. 我将JSON模型转换为OrmLite模型(没有库,我自己制作)
  5. 将OrmLite模型返回给等待请求响应的回调
  6. 回调负责调用DAO实际存储数据
  7. 此过程适用于简单实体。但是当我尝试管理更复杂的实体时出现问题,例如ForeignCollection。实际上,我无法实现第4步,因为我无法创建新的ForeignCollection来将我的子实体放入其中。

    我找到了一些答案,说我应该自己存储每个孩子,但它会打破我工作流程的第6步。

    所以问题是:

    如何在从数据库中获取对象之前初始化ForeignCollection

    我可以找到改变工作流程的方法。但它只是一种“解决方法”,并且只是为了达到这个目的而创建容器对象......

    OrmLite架构(简化)

    (班级Entity只有一个属性id及其getter / setter。)

    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 个答案:

没有答案