发布OpenHelperManager后,OrmLite清理查询结果

问题描述 投票:0回答:1

我有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。为什么?

java android ormlite
1个回答
0
投票

我已经解决了我的问题。我需要将maxEagerLevel增加到2(默认值为1)。

将此设置为扩展热切的外国集合的外国集合的次数。如果你查询A并且它有一个渴望的字段B的外部集合,它有一个渴望的字段C ...的外部集合,那么每当你查询A时就会发生很多数据库操作。默认情况下这个值是1表示如果你查询A,那么B的集合将被急切地获取,但是每个B对象都将具有一个惰性集合而不是一个急切的C集合。只有当你知道自己在做什么时才应该增加它。

int maxEagerLevel() 
© www.soinside.com 2019 - 2024. All rights reserved.