我们假设我有以下对象:
public class MyOwnList {
@DatabaseField(id= true)
protected int id;
@ForeignCollectionField(eager = false)
protected Collection<Item> items;
}
当items
被标记为惰性时,如果我从数据库加载列表对象,则不会加载它。
这正是我想要的!!
问题在于,每当我访问items
时,ORMLite都会进行SQL查询以获取集合。只有在激活ORMLite的记录后才发现它......
为什么这样做?有什么好理由吗?
有什么方法可以延迟加载集合,但只有一次,而不是每次我访问集合时?渴望和懒惰之间的东西?
答案 0 :(得分:7)
问题在于,每当我访问项目时,ORMLite都会进行SQL查询以获取集合。
所以最初我不明白这一点。您要求的是ORMLite在第一次延迟加载项目后缓存项目集合。默认情况下,这个问题是ORMLite不知道你的items
集合有多大。使用延迟集合的原因之一是处理大型集合。如果ORMLite将所有惰性集合保存在内存中,它可能会填满内存。
我将在TODO列表中添加类似lazyCached = true
的内容,它可以实现懒惰和渴望之间的混合。好建议。