如何创建对象并填充外部集合?

我试图创建一个对象,并在单个操作中填充该对象所拥有的外部集合的成员。 我已经尝试过所有我能想到的操作顺序,而且似乎无法使其正常工作。

我的课程是(跳过不相关的领域和注释):

@DatabaseTable
public class ScheduledJob
{
    @DatabaseField(id=true)
    private String id = UUID.randomUUID ().toString ();

    @ForeignCollectionField(eager=true)
    private Collection<ScheduledJobTask> tasks;

    /* other stuff here ... */
}

@DatabaseTable
public class ScheduledJobTask
{
    @DatabaseField(id=true)
    private String id = UUID.randomUUID ().toString ();
    @DatabaseField(foreign=true)
    private ScheduledJob job;
    /* more other stuff ... */

    public ScheduledJobTask(Task t) { 
       /* initialise scheduled task from template task by copying relevant fields...*/ 
    }

}

我创建我的对象,因此:

ScheduledJob job = new ScheduledJob ();
// fill in other fields of job here
job.tasks = new ArrayList<ScheduledJobTask> ();
for (Task t : template.getTasks())
    job.tasks.add(new ScheduledJobTask(t));

sched.getSchedule().add (job);  // 'sched' is an object loaded from another table, this
                                // adds 'job' to a foreign collection in that table
Storage.store.scheduledJobs.createIfNotExists (job);
for (ScheduledJobTask t : job.getTasks ())
    Storage.store.scheduledJobTasks.createIfNotExists (t);
Storage.store.daySchedules.update (sched);

我已经尝试了最后三条语句的所有排序,但似乎没有任何效果:在每种情况下,最终在scheduledjobtask数据库表中的条目对于其'job_id'字段都为空。

任何想法我做错了什么?


你缺少的是你没有设置Task.job字段。 ScheduledJobTask.job字段是设置外部集合的内容。 当您检索Job ,它会在任务表中查找所有具有该作业的任务 - 而不是相反。

您需要执行以下操作:

for (Task t : template.getTasks()) {
    t.setJob(job);
    job.tasks.add(new ScheduledJobTask(t));
}

然后,当你这样做时:

Storage.store.scheduledJobs.createIfNotExists (job);

所有的job领域将有一个Job有一个id字段集。 所以当你坚持你的任务时,他们的工作领域将会有这个工作ID。

链接地址: http://www.djcxy.com/p/11775.html

上一篇: how to create an object and populate foreign collection?

下一篇: How to make ☆ spin around the centre?