2016-12-07 16 views
1

私は4つのクラスがあります、だから、ORMLite外国コレクション

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

Bucketの内側に、私はもちろん、独自のデータベーステーブルを持っていない、Good抽象クラスのForeignCollectionFieldを、持っています。

データベースエントリが正常に作成されますが、私はqueryForAll()を呼び出すようにしようとすると、それは私にエラーを与えている:

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

は、この問題を解決する方法はありますか?
また、抽象クラスのForeignCollectionFieldを作成することもできません。

答えて

1

私はこの問題を解決するのがかなり簡単だとわかりました。

@ForeignCollectionFieldBucketモデルから削除しました。だから、内部BucketテーブルORMLiteはGoodエンティティについて何も知らない。

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

のデータのロード:

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

は、データを永続化