我在我的android項目中使用ormlite。我有兩個類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對象,如in example
UserShow show = new UserShow();
userShowDao.create(show);
for (Episode e: eps) {
e.setShow(show);
episodeDao.create(e);
}
usershow將對象有個外國延遲集合的情節,但是當我試圖讓所有userShows:
shows = userShowsDao().queryForAll();
我正在收集所有節目集合的劇集。爲什麼會發生?集合是懶惰的,我必須得到空或其他東西,但沒有收集Episode對象。如何讓這個收藏真的很懶?如果ORMLite能夠在沒有延遲集合的情況下獲取對象,並在真正需要時進行初始化,那可能會很酷。例如Hibernate.initialize
方法。
謝謝!
灰色,謝謝你的回覆。我正在獲取具有已初始化劇集集合的userShows對象,但是我不會對劇集進行任何調用。 –
我可以在我的調試器中看到這個http://postimage.org/image/cdqihamc/方法 public List getAllUserShows(){ List shows = null; try { shows = getHelper()。getUserShowsDao()。queryForAll(); catch(SQLException e){ e.printStackTrace(); } return shows; } –
是的,你的調試器正在調用'iterator()'和其他方法,使查詢在那一點。它顯示那裏有劇集,但在調試器要求他們之前,他們不會在那裏。如果打開日誌記錄功能,只有當調試器顯示有關集合的信息時,才能看到正在查詢的查詢。 – Gray