2013-02-11 2 views
6

나는 하나의 작업으로 객체를 만들고 그 객체가 가지고있는 외국 콜렉션의 멤버를 채우려고한다. 내가 생각할 수있는 모든 작업 순서를 시도했지만 제대로 작동하지 않는 것 같습니다.ORMLite - 개체를 만들고 외국 컬렉션을 채우는 방법은 무엇입니까?

내 클래스 (관련이없는 필드와 주석을 건너 뛰는)됩니다

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); 

내가 마지막 세 문장의 모든 순서 부를 시도했다, 그러나 아무것도에 보인다 :

@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...*/ 
    } 

} 

나는 이렇게 내 객체를 생성 work : 모든 경우에있어서, scheduledjobtask 데이터베이스 테이블에서 끝나는 엔트리는 'job_id'필드에 대해 null을 갖는다.

내가 잘못 한 아이디어가 있습니까?

답변

3

누락 된 부분은 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 모든 필드는 id 필드 세트가있는 Job있을 것이다. 따라서 작업을 지속하면 작업 필드에 해당 작업 ID가 생깁니다.

+0

아, 고맙습니다. 개체가 지속될 때 해당 필드가 자동으로 설정된다고 가정했습니다. :) – Jules

+0

ORMLite가 쉽게 할 수있는 방법을 찾아 낼 수 있다면, 나는 모든 귀가 @ 쥘입니다. – Gray

관련 문제