我正在试用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();
}
}
答案 0 :(得分: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();
}