ORMLite LazyForeignCollection:如何只查询一次集合?

时间:2012-07-24 18:17:06

标签: ormlite

我们假设我有以下对象:

public class MyOwnList {

    @DatabaseField(id= true)
    protected int id;

    @ForeignCollectionField(eager = false)
    protected Collection<Item> items;
}

items被标记为惰性时,如果我从数据库加载列表对象,则不会加载它。 这正是我想要的!!

问题在于,每当我访问items时,ORMLite都会进行SQL查询以获取集合。只有在激活ORMLite的记录后才发现它......

为什么这样做?有什么好理由吗?

有什么方法可以延迟加载集合,但只有一次,而不是每次我访问集合时?渴望和懒惰之间的东西?

1 个答案:

答案 0 :(得分:7)

  

问题在于,每当我访问项目时,ORMLite都会进行SQL查询以获取集合。

所以最初我不明白这一点。您要求的是ORMLite在第一次延迟加载项目后缓存项目集合。默认情况下,这个问题是ORMLite不知道你的items集合有多大。使用延迟集合的原因之一是处理大型集合。如果ORMLite将所有惰性集合保存在内存中,它可能会填满内存。

我将在TODO列表中添加类似lazyCached = true的内容,它可以实现懒惰和渴望之间的混合。好建议。