1

我正在尝试将ormdroid作为 Android 的 ORM 工具。我有一个我想要保留的收藏夹类的对象列表,我时不时地使用 ormdroid 将这些对象的列表保存到磁盘。

当然,用户从列表中删除的那些收藏夹也应该从磁盘中删除,所以我想首先从磁盘中删除所有收藏夹,然后再次保存列表:

                List<Favorite> oldFavs = Entity.query(
                        Favorite.class).executeMulti();

                for (Favorite f : oldFavs) {
                    f.delete();
                    Log.d("ORM", "Deleting: " + f.getTitle());

                }

然后再次保存我的收藏夹:

                for (Favorite f : myFavorites) {
                    f.save();
                        Log.d("ORM", "Saving: " + f.getTitle());                
                }

通过在我的代码中放入大量 Log.d() 我发现了以下内容:

从磁盘中删除所有收藏夹后,使用 ormdroid 的查询确实返回了一个大小为 0 的列表。但是当我再次保存我的收藏夹时,其中一些(旧记录中已经存在的那些)被更新,而不是新创建的f.save() 方法,但仍不可用于查询。

有没有人积极使用 ormlite 可以在这里帮助我,或者有人可以验证 ormlite 的 delete() 方法中的代码实际上并且肯定会从数据库中删除这条记录:

public void delete() {
    if (!mTransient) {
      SQLiteDatabase db = ORMDroidApplication.getDefaultDatabase();
      db.beginTransaction();


  try {
    delete(db);
    db.setTransactionSuccessful();
  } finally {
    db.endTransaction();
  }

  db.close();
}
  }
4

1 回答 1

1

我在使用 ORMDroid 删除实体时也遇到了一些问题,似乎删除是在插入之后执行的,即使代码的顺序正确。虽然这可能不是 ORMDroid 的问题,但是我现在无法理解一些 SQLite 怪癖。无论如何,我暂时能够以这种方式绕过问题,只是真正切换删除/插入的顺序:

// First create the list of items to delete.
// Don't delete them just yet though.
List<Favorite> oldFavs = Entity.query(Favorite.class).executeMulti();

// Insert new ones
for (Favorite f : myFavorites) {
   f.save();
}

// Delete the old ones
for (Favorite f : oldFavs) {
    f.delete();
}
于 2013-10-02T20:30:02.653 回答