2016-12-07 1 views
1

Ich habe 4 Klassen:ORMLite Foreign Sammlung von abstrakten Klasse

@DatabaseTable(tableName = "bucket") 
public class Bucket { 
    ... 
    @ForeignCollectionField(eager = true) 
    private Collection<Good> goods; 
    ... 
} 

public abstract class Good { 
    ... 
    @DatabaseField(foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true) 
    private Bucket bucket; 
    ... 
} 

@DatabaseTable(tableName = "bread") 
public class Bread extends Good { 
    ... 
} 

@DatabaseTable(tableName = "milk") 
public class Milk extends Good { 
    ... 
} 

Also, innerhalb Bucket Ich habe ForeignCollectionField der abstrakten Klasse Good, die natürlich keine eigene Datenbanktabelle haben.

Datenbankeinträge werden normalerweise erstellt, aber wenn ich versuche queryForAll() zu nennen es gibt mir eine Fehlermeldung:

bucketDao.queryForAll(); 
// no such table: good (code 1): , while compiling: SELECT * FROM `basecard` WHERE `bucket_id` = ? 

Gibt es eine Möglichkeit, dieses Problem zu lösen?
Oder ich kann nicht einmal ForeignCollectionField der abstrakten Klasse erstellen?

Antwort

1

Ich fand es ziemlich einfach, dieses Problem zu lösen.

Ich entfernte gerade @ForeignCollectionField von Bucket Modell überhaupt. So, Inside Bucket Tabelle ORMLite weiß nichts über Good Einheit.

Persist Daten:

// 1 using bucketDao add bucket 
bucketDao.add(bucket) 
// 2 iterate over collection 
for (Bread bread: breadList) { 
    bread.setBucket(bucket); // set current bucket to good item 
    breadDao.add(bread); // using breadDao add bread 
} 
// 3 do the same with milk collection 
for (Milk milk: milkList) { 
    milk.setBucket(bucket); 
    milkDao.add(milk); 
} 

Daten laden:

int bucketId = 1; // for example working with bucket with id=1 
Bucket bucket = bucketDao.queryForEq("id", bucketId)); // query for this bucket 
List<Milk> milkList = milkDao.queryForEq("bucket_id", bucketId); // query for all milks, that has a foreign key to current bucket 
List<Break> breadList = breadDao.queryForEq("bucket_id", bucketId); // the same for bread 

// finally set milks and breads to Good collection inside Bucket 
List<Good> goodList = new ArrayList<>(); 
goodList.addAll(milkList); 
goodList.addAll(breadList); 
bucket.setGoods(goodList); 
Verwandte Themen