Android 与房间数据库的事务处理

Android 与房间数据库的事务处理,android,android-sqlite,android-architecture-components,Android,Android Sqlite,Android Architecture Components,我对房间数据库中的事务有一个问题。是否可以在DAO对象之外使用@Transaction注释 我有复杂的对象要保存,所以我通过一个从不同DAO调用许多方法的管理器来保存。但我想在任何方法失败时回滚事务 它与 roomDB.runInTransaction { dao1.insert(object.object1) dao2.insert(object.object2) dao3.update(objec.object3) } 我面临的第二个问题不是闭合游标。有时我会遇到这样的例外: W/SQL

我对房间数据库中的事务有一个问题。是否可以在DAO对象之外使用@Transaction注释

我有复杂的对象要保存,所以我通过一个从不同DAO调用许多方法的管理器来保存。但我想在任何方法失败时回滚事务

它与

roomDB.runInTransaction { 
dao1.insert(object.object1)
dao2.insert(object.object2)
dao3.update(objec.object3)
}
我面临的第二个问题不是闭合游标。有时我会遇到这样的例外:

W/SQLiteCompiledSql: Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: DELETE FROM tableName WHERE status IN ( ?,? )
    net.sqlcipher.database.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
我正在使用的示例方法:

    @TypeConverters(NameConverter::class)
    @Query("UPDATE tableName SET status = :status, last_update_date = :updateDate , finish_date = :finishDate, problem_reason = :problemReason WHERE id = :id")
    fun updateStatus(id: Long, status: WorkerStatus, updateDate: Long, finishDate: Long?, problemReason: String?)
是否需要向方法添加其他注释以关闭光标

谢谢你的建议;)