2016-12-07 1 views
1

J'ai 4 classes:ORMLite Collection étrangères de la classe abstraite

@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 { 
    ... 
} 

Ainsi, à l'intérieur Bucket j'ai ForeignCollectionField de classe abstraite Good, qui, bien sûr, ne dispose pas de sa propre table de base de données.

entrées de la base de données sont créés normalement, mais lorsque je tente d'appeler queryForAll() il me donne l'erreur:

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

est-il un moyen de résoudre ce problème?
Ou je ne peux même pas créer ForeignCollectionField de classe abstraite?

Répondre

1

J'ai trouvé cela très simple de résoudre ce problème. Je viens de retirer @ForeignCollectionField du modèle Bucket. Donc, à l'intérieur Bucket table ORMLite ne sait rien à propos de Good entité.

données: persist

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

données de charge:

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