微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在尝试创建一个对象,并在一个操作中填充该对象持有的外部集合的成员.我已经尝试了我能想到的每一个操作顺序,而且似乎无法让它工作.

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

@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字段的作业.所以,当你坚持你的任务时,他们的工作领域就会有这个职位.

原文地址:https://www.jb51.cc/java/129941.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐