我正在尝试创建一个对象,并在一个操作中填充该对象持有的外部集合的成员.我已经尝试了我能想到的每一个操作顺序,而且似乎无法让它工作.
我的课程是(跳过不相关的字段和注释):
@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’字段都为null.
我做错了什么想法?
解决方法
您缺少的是您没有设置Task.job字段. ScheduledJobTask.job字段用于设置外部集合.当您检索作业时,它会在任务表中查找具有该作业的所有任务 – 而不是相反.
您将需要执行以下操作:
for (Task t : template.getTasks()) { t.setJob(job); job.tasks.add(new ScheduledJobTask(t)); }
然后,当你这样做:
Storage.store.scheduledJobs.createIfNotExists (job);
所有作业字段都将具有已设置id字段的作业.所以,当你坚持你的任务时,他们的工作领域就会有这个职位.