У меня есть вопрос о транзакциях в базе данных ROOM. Можно ли использовать аннотацию @Transaction вне объектов DAO?
У меня сложный объект для сохранения, поэтому я делаю это с помощью менеджера, который вызывает много методов из разных daos. Но я хочу откатить транзакцию, если какой-либо метод завершится неудачей.
Он работает с
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?)
Нужно ли добавлять дополнительную аннотацию к методу, чтобы закрыть курсор?
Спасибо за любой совет;)