Room @Transaction无法运行,但是会运行单个功能

时间:2019-11-05 12:20:05

标签: android android-room

我的实体

@Entity(tableName = "user_table")
data class User(
val userID:String,
val userName:String,
val userRoleName:String,
val adminID:String,
val name:String,
val email:String,
val phoneNumber:String,
val adminType:String,
val batchID:String,
val centerID:String,
val batchName:String,
val centerName:String
) {
    @PrimaryKey(autoGenerate = true)
    var id: Int = 0
}

我的道

@Dao
abstract class MDao {

    @Insert
    abstract suspend fun insert(user: User)

    @Query("select userID from user_table")
    abstract suspend fun getuserID():String

    @Query("select adminID from user_table")
    abstract suspend fun getadminID():String

    @Delete
    abstract suspend fun deleteUser(user: User)

    @Query("delete from user_table")
    abstract fun deleteUserTable()


    @Query("select count(*) from user_table")
    abstract suspend fun getUserTableCount() : Int

    @Transaction
    open suspend fun insertUser(user: User){
        deleteUserTable()
        insertUser(user)
    }
}

我正在使用协程来使用这些功能,如果我调用delete并一个接一个地插入,则代码运行平稳。

val dao :MDao = mDatabase(it).getDao()
                            dao.deleteUserTable()
                            dao.insert(user)

但是如果我致电交易,则会出现错误:

val dao :MDao = mDatabase(it).getDao()
                            dao.insertUser(user)

错误:

java.lang.StackOverflowError: stack size 1042KB
        at kotlinx.coroutines.Job$DefaultImpls.get(Unknown Source:8)
        at kotlinx.coroutines.JobSupport.get(JobSupport.kt:27).....

有时我还会收到一条错误消息,指出数据库是只读的。

0 个答案:

没有答案