gpt4 book ai didi

greendao - 道异常 : Entity is detached from DAO context

转载 作者:行者123 更新时间:2023-12-04 04:08:25 25 4
gpt4 key购买 nike

我有两个实体,UserStore . User有很多Stores (1:M) 关系。我通过以下代码将一些商店列表插入到商店表中。

public void saveStoresToDatabase(Context context, ArrayList<Store> storeList) {

DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "notes-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);

DaoSession daoSession = daoMaster.newSession();
StoreDao storeDao = daoSession.getStoreDao();

ArrayList <Store> list = SharedData.getInstance().getUser().getStoreList();

for(int i = 0; i < storeList.size(); i++) {
storeList.get(i).setUserIdForStore(SharedData.getInstance().getUser().getId());
}
storeDao.insertOrReplaceInTx(storeList);
list.addAll(storeList);
user.resetStoreList();

}

每当我尝试调用 user.getStoreList() 时,我都会收到“实体与 DAO 上下文分离”异常。 .异常发生在以下代码中被截断为 daoSessionnull .
public ArrayList<Store> getDMStoreListFromDatabase(Context context) {
return SharedData.getInstance().getUser().getStoreList();
}

哪里 SharedData是我的单例,有一个用户对象:
private SharedData() {
user = new User();
}

我得到了 sharedData实例如下:
public static synchronized SharedData getInstance() {
if (sharedObject == null) {
sharedObject = new SharedData();
}
return sharedObject;
}

最佳答案

表示数据库条目的对象(如 User )仅在它们之前从数据库中提取或插入到数据库时才附加到数据库 session 。

看起来您没有使用 greendao 加载用户对象,而是使用 new 创建它。 .

您似乎也没有使用 dao 存储这个用户对象。因此用户对象不附加到 session 。

最重要的是,您还只需在每个商店中设置用户 ID。如果您没有在其他地方插入用户对象,这也可能导致错误,因为外键约束可能会被破坏(取决于 greendao 如何在内部处理它)。

尝试使用 setUser() 将用户对象添加到商店中而不是 setUserIdForStore() .

如果这不起作用,请尝试首先使用 UserDao 存储或加载用户对象。 .

关于greendao - 道异常 : Entity is detached from DAO context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577692/

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