我在数据库中嵌套了一些项目,例如房子-房间。如果删除房屋,我也要删除所有房间,但是我不想考虑这个,因此房屋必须知道这一点。所以我的设置看起来像这样:
fun deleteHouse(item: House): Single<House> {
houseObservable // emits List<House>
.take(1)
.map {
DBManager.beginTransaction()
it
}
.flatMapIterable { it }
.flatMapSingle { deleteRoom(it) }
.toList()
.map {
DBManager.deleteWithoutDependencies(item)
DBManager.endTransaction()
item
}
}
fun deleteRoom(item: Room): Single<Room> {
roomObservables // emits List<Room>
.take(1)
.map {
DBManager.beginTransaction()
it
}
.flatMapIterable { it }
.flatMapSingle { DBManager.deleteWithoutDependencies(item) }
.toList()
.map {
DBManager.endTransaction()
item
}
}
问题
每个项目都在RxComputationThread-1
上以及每个beginTransaction
和endTransaction
上都被删除,但最后一个完成删除操作的endTransaction
房子。
我需要在同一线程上运行所有数据库操作,否则数据库将自身锁定...
有什么办法解决这个问题吗?
想法
将用过的Schedular
传递给函数并在flatMaps
中使用它们,但这真的是解决这个问题所必需的吗?