GreenDAO:实体已从DAO上下文中分离

3
我使用GreenDAO,但是遇到了以下异常:

"de.greenrobot.dao.DaoException: Entity is detached from DAO context".

在生成的代码中,我发现了这段代码。
/** called by internal mechanisms, do not call yourself. */
public void __setDaoSession(DaoSession daoSession) {
    this.daoSession = daoSession;
    myDao = daoSession != null ? daoSession.getPeerGroupDao() : null;
}

有人知道GreenDAO何时调用它吗?此外,如何触发它进行调用。

谢谢。


展示一些你自己的代码,同时请参考 https://groups.google.com/forum/#!msg/greendao/WW_pLJvwa3E/diFqMePh2pAJ,该链接描述了一个类似于你的问题。 - Dennis Jaamann
2
如果您找到了解决问题的方法,请在自己的问题上回答并接受,这样其他搜索此问题的用户就可以在这里找到解决方案。 - Dennis Jaamann
2个回答

7

我找到了解决方案。

在调用loadDeep和queryDeep方法时,greenDAO内部会调用__setDaoSession。在调用这些方法后,就建立了一对多或者一对一的关系。如果仅使用SQLiteDatabase查询结果,你仅能获得数据,但关系没有建立。

更多详情请参考这个网站

谢谢。


1
为了补充King Wu的回答,当你自己实例化对象时也会出现相同的问题。为了解决这个问题,只需将daoSession设置为该对象即可。
Product product = new Product(null, 1L, categoryId, null);
product.__setDaoSession(MyApplication.getDaoSession());

然后你可以做

product.getCategory()

1
你不应该自己调用这个方法。 - M. H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接