我在我的 android 项目中使用 ormlite。我有两节课
@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 对象,例如在例子中 http://ormlite.svn.sourceforge.net/viewvc/ormlite/ormlite-jdbc/trunk/src/test/java/com/j256/ormlite/examples/foreignCollection/
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
method.
Thanks!
惰性集合已经过良好的测试,并且被许多其他人使用,因此尽管它可能存在错误,但您更有可能被惰性集合类欺骗。
当每个UserShow
对象是从 DAO 中检索的,episodes
不会为空,而是会被设置为一个实例LazyForeignCollection
。但是,不会进行任何其他查询,也不会出现任何问题Episode
集合中包含的数据。如果您随后调用集合上的方法之一,例如userShow.getEpisodes().iterator()
,那么一个separate此时进行查询以允许您迭代该节目的剧集。这就是惰性集合的工作原理。
如果您仍然认为惰性集合不起作用,请向我们展示您如何确定节目具有剧集数据。要查看在何处执行哪些查询,您可以启用使用 ORMLite 进行 Android 日志记录 http://ormlite.com/docs/android-logging.
Edit:
事实证明,@Georgy 正在使用调试器来调查该集合。调试器很可能调用相同的iterator()
or toArray()
导致在该时刻发出集合查询的方法。因此,在调试器请求之前,集合中没有任何剧集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)