我有3张桌子。
@DatabaseTable(tableName = "summary")
public class Summary {
@DatabaseField(columnName = _ID, generatedId = true)
private int id;
@DatabaseField (columnName = OPERATION_NAME)
private String operation;
@ForeignCollectionField(columnName = ENTRIES, eager = true)
private Collection<Entry> entries;
}
第二:
@DatabaseTable(tableName = "entry")
public class Entry implements Parcelable {
@DatabaseField(columnName = _ID, generatedId = true)
private int _id;
@DatabaseField (foreign = true, columnName = SUMMARY, foreignAutoCreate = true)
private Summary summary;
@ForeignCollectionField(columnName = PARAMS, eager = true)
private Collection<Params> params;
}
第三:
@DatabaseTable(tableName = "params")
public class Params implements Parcelable {
@DatabaseField(columnName = _ID, generatedId = true)
private int _id;
@DatabaseField (foreign = true, columnName = ENTRY, foreignAutoCreate = true, foreignAutoRefresh = true)
private Entry entry;
}
我提出了查询
List<Summary> summaries = new ArrayList<Summary>();
summaries = dao.queryForAll();
摘要的每个元素都包含Collection条目。条目的每个元素都包含Collection params;
我得到了带有记录的List摘要,但是在OpenHelperManager.releaseHelper()之后;我丢失了Collection的数据,其中包含来自摘要的第三个表的数据。我得到IllegalStateException。为什么?
我已经解决了我的问题。我需要将maxEagerLevel增加到2(默认值为1)。
将此设置为扩展热切的外国集合的外国集合的次数。如果你查询A并且它有一个渴望的字段B的外部集合,它有一个渴望的字段C ...的外部集合,那么每当你查询A时就会发生很多数据库操作。默认情况下这个值是1表示如果你查询A,那么B的集合将被急切地获取,但是每个B对象都将具有一个惰性集合而不是一个急切的C集合。只有当你知道自己在做什么时才应该增加它。
int maxEagerLevel()