Моя сущность
@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)
}
}
Я использую сопрограммы для использования этих функций, если я вызываю команды удаления и вставки один за другим, код выполняется гладко.
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).....
иногда я также получаю сообщение об ошибке, что база данныхтолько для чтения.