OrmLite 释放 OpenHelperManager 后清理查询结果
OrmLite clean query result after release OpenHelperManager
我有 3 个 table。
@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();
摘要 的每个元素都包含集合条目。条目的每个元素都包含集合参数;
我得到了 List summaries 和记录,但是之后
OpenHelperManager.releaseHelper();
我丢失了 Collection 的数据,其中包含来自摘要的第三个 table 的数据。我得到 IllegalStateException。
为什么?
我的问题已经解决了。我需要将 maxEagerLevel 增加到 2(默认 1)。
将此设置为扩展一个急切的外国collection的外国collection的次数。如果你查询 A 并且它有一个 eager foreign-collection 的字段 B,它有一个 eager foreign-collection 的字段 C ...,那么每当你查询 A 时,就会发生很多数据库操作。默认情况下,此值为 1,这意味着如果您查询 A,B 的 collection 将被急切获取,但每个 B objects 将有一个惰性 collection 而不是急切 collection 的 C。只有当你知道自己在做什么时才应该增加它。
int maxEagerLevel()
我有 3 个 table。
@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();
摘要 的每个元素都包含集合条目。条目的每个元素都包含集合参数;
我得到了 List summaries 和记录,但是之后 OpenHelperManager.releaseHelper(); 我丢失了 Collection 的数据,其中包含来自摘要的第三个 table 的数据。我得到 IllegalStateException。 为什么?
我的问题已经解决了。我需要将 maxEagerLevel 增加到 2(默认 1)。
将此设置为扩展一个急切的外国collection的外国collection的次数。如果你查询 A 并且它有一个 eager foreign-collection 的字段 B,它有一个 eager foreign-collection 的字段 C ...,那么每当你查询 A 时,就会发生很多数据库操作。默认情况下,此值为 1,这意味着如果您查询 A,B 的 collection 将被急切获取,但每个 B objects 将有一个惰性 collection 而不是急切 collection 的 C。只有当你知道自己在做什么时才应该增加它。
int maxEagerLevel()