2013-02-11 12 views
6

Bir nesne oluşturmaya çalışıyorum ve bu nesne tarafından tutulan yabancı bir koleksiyonun üyelerini tek bir işlemle dolduruyorum. Düşünebildiğim tüm operasyonları denedim ve işe yaramayacak gibi görünmüyor.ORMLite - Bir nesne nasıl oluşturulur ve yabancı koleksiyon nasıl doldurulur?

Derslerim (ilgisiz alanlar ve açıklamaları atlama) vardır:

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

son üç tabloların tüm orderings denedi, ama hiçbir şey görünüyor:

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

} 

Ben böylece benim nesneleri oluşturmak iş: her durumda, planlananjobtask veritabanı tablosunda yer alan girdiler, 'job_id' alanı için boştur.

Neyi yanlış yaptığım hakkında bir fikrin var mı?

cevap

3

Eksik olan şey, Task.job alanını ayarlamamanızdır. ScheduledJobTask.job alanı yabancı koleksiyonu kurar. Bir Job aldığınızda, o işin sahip olduğu tüm görevleri bulmak için görev tablosunda görünür - başka bir şekilde değil.

Sen böyle bir şey yapmak gerekecektir:

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

Sonra, bunu yaparken:

Storage.store.scheduledJobs.createIfNotExists (job); 

job tüm alanları bir id saha ayarlanmış olduğu bir Job olacaktır. Böylece görevlerinizi sürdürdüğünüzde, iş alanlarının bu iş kimliğine sahip olacaktır.

+0

Ah, teşekkürler, nesne devam ettiğinde bu alanların otomatik olarak ayarlanacağını varsayıyordum. :) – Jules

+0

Eğer ORMLite'nin bunu yapabilmesi için kolay bir yol bulabilirsen, ben hepimiz @Jules. – Gray

İlgili konular