7

假设我有以下对象:

public class MyOwnList {

    @DatabaseField(id= true)
    protected int id;

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

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

问题是每次我访问items时,ORMLite 都会进行 sql 查询来获取集合。激活ORMLite的日志后才发现...

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

有什么方法可以延迟加载集合,但只能加载一次,而不是每次访问集合?所以介于渴望和懒惰之间?

4

1 回答 1

7

问题是每次我访问项目时,ORMLite 都会进行 sql 查询来获取集合。

所以一开始我不明白这一点。您要求的是ORMLite在第一次延迟加载后缓存项目集合。将此作为默认设置的问题是 ORMLite 不知道您的收藏有多大items。使用惰性集合的原因之一是处理大型集合。如果 ORMLite 将所有惰性集合保存在内存中,它可能会填满内存。

我将在 TODO 列表中添加类似lazyCached = true懒惰和渴望的混合体。好建议。

于 2012-07-24T18:37:51.237 回答