gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:41 25 4
gpt4 key购买 nike

我正在尝试创建一个对象并在单个操作中填充该对象持有的外部集合的成员。我已经尝试了我能想到的每一种操作顺序,但似乎无法让它发挥作用。

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

@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。

关于java - ORMLite - 如何创建对象并填充外部集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14819727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com