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

d1r*_*1rk 7 ormlite

我们假设我有以下对象:

public class MyOwnList {

    @DatabaseField(id= true)
    protected int id;

    @ForeignCollectionField(eager = false)
    protected Collection<Item> items;
}
Run Code Online (Sandbox Code Playgroud)

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

问题是每次我访问时items,ORMLite都会进行sql查询以获取集合.只有在激活ORMLite的日志记录后才发现它...

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

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

Gra*_*ray 7

问题是每次我访问项目时,ORMLite都会进行SQL查询以获取集合.

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

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