gpt4 book ai didi

android - ORMLite 和惰性集合的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:38 25 4
gpt4 key购买 nike

我在我的 android 项目中使用 ormlite。我有两个类(class)

@DatabaseTable(tableName = "usershows")
public class UserShow {
@DatabaseField(id = true)
private Integer showId;

@ForeignCollectionField(eager = false)
private ForeignCollection<Episode> episodes;
...
}

@DatabaseTable(tableName = "episodes")
public class Episode {
@DatabaseField(id = true)
private Integer episodeId;

@DatabaseField(foreign = true)
private UserShow show;
...
}

我正在保存我的 UserShows 对象,如 in example

UserShow show = new UserShow();
userShowDao.create(show);

for (Episode e: eps) {
e.setShow(show);
episodeDao.create(e);
}

UserShow 对象有一个国外的惰性集合剧集,但是当我试图获取所有 userShows 时:

shows = userShowsDao().queryForAll();

我正在获取所有包含剧集集合的节目对象。为什么会这样?集合是懒惰的,我必须得到 null 或其他东西,但没有 Episode 对象的集合。如何让这个系列变得真正懒惰?如果 ORMLite 能够在没有惰性集合的情况下获取对象并在真正需要时进行初始化,那可能会很酷。例如 Hibernate.initialize 方法。

谢谢!

最佳答案

惰性集合已经过良好测试并被许多其他人使用,因此尽管它可能存在错误,但您更有可能被惰性集合类欺骗。

当从 DAO 中检索到每个 UserShow 对象时,episodes 将不会为空,而是将设置为 LazyForeignCollection 。但是,不会进行其他查询,并且集合中不会包含任何 Episode 数据。如果您随后调用集合中的方法之一,例如 userShow.getEpisodes().iterator(),则此时将进行单独查询以允许您遍历该节目的剧集。这就是惰性集合的工作方式。

如果您仍然认为惰性集合不起作用,请告诉我们您如何确定节目具有剧集数据。要查看在哪里进行了哪些查询,您可以启用 Android logging with ORMLite .


编辑:

事实证明,@Georgy 正在使用调试器来调查集合。调试器很可能会调用相同的 iterator()toArray() 方法,这会导致集合查询在那一刻发出。因此,在调试器要求之前集合中没有任何剧集。

关于android - ORMLite 和惰性集合的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7242363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com