我有一种情况,我需要在多个表上进行一些插入/更新/删除操作,如果在一个表中的导入失败,我希望能够回滚。 我正在使用RoomDatabase,但是插入方法是在事务中完成的,即使只有一项。
在我的Dao类中插入一个项目的示例:
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertOrReplace(obj: Item): Long
然后生成了Java代码:
@Override
public long insertOrReplace(Item obj) {
__db.beginTransaction();
try {
long _result = __insertionAdapterOfItem.insertAndReturnId(obj);
__db.setTransactionSuccessful();
return _result;
} finally {
__db.endTransaction();
}
}
我想做的是这样的:
val db = AppDatabase.getInstance().openHelper.writableDatabase
db.beginTransaction()
itemDao.insertOrReplace(data.items)
itemStatisticsDao.insertOrReplace(data.itemStats)
supplierDao.insertOrReplace(data.suppliers)
db.setTransactionSuccessful()
db.endTransaction()
由于dao类的插入方法是在事务中完成的,所以我得到了数据库锁。
我试图将beginTransactionNonExclusive()方法用于相同的结果。
目前我唯一能想到的解决方案是使用openHelper并使用ContentValues手动进行插入...
在Room中有什么方法吗?