Ошибка комнаты: тип параметра должен быть классом, аннотированным с помощью @Entity, или его коллекцией/массивом.

Я получаю следующую ошибку:

error: Type of the parameter must be a class annotated with @Entity or a collection/array of it.
    java.lang.String matchId);

на мой matchedBefore() запрос:

@Dao
interface MatchedUsersDao {

    // Checks to see if user has matched before (if it returns 1)
    @Query("SELECT COUNT(*) FROM matched_users WHERE :matchId = match_id LIMIT 1")
    fun matchedBefore(matchId: String): Int

    @Insert(onConflict = OnConflictStrategy.ABORT)
    fun addMatchUid(matchId: String)
}

Вот моя Сущность

@Entity(tableName = "matched_users")
data class MatchedUser(
    @PrimaryKey(autoGenerate = true) val id: Int,
    @ColumnInfo(name = "match_id") val matchId: String
)

DB

@Database(entities = arrayOf(MatchedUser::class), version = 1)
abstract class AppDatabase : RoomDatabase() {

    abstract fun matchedUsersDao(): MatchedUsersDao
}

и я создаю свою БД в своем приложении:

class CustomApplication : Application() {

    companion object {
        var database: AppDatabase? = null
    }

    override fun onCreate() {
        super.onCreate()
        CustomApplication.database = Room.databaseBuilder(this, AppDatabase::class.java, "AppDatabase").build()
    }

Может ли кто-нибудь сказать мне, что указывает ошибка и как я могу ее решить?


person Zorgan    schedule 25.08.2019    source источник


Ответы (1)


Ваша проблема в этой строке

@Insert(onConflict = OnConflictStrategy.ABORT)
fun addMatchUid(matchId: String)

Если вы хотите использовать аннотации @Insert, вы должны отправить экземпляр MatchedUser, а не String.

Так что вы можете :

1) Отправьте новое MatchedUser со своим идентификатором (вставьте пустое MatchedUser со своим идентификатором)

Ваш код должен быть таким

@Insert(onConflict = OnConflictStrategy.ABORT)
fun addMatchUid(matchUser: MatchedUser)

2) Написал новый @Query для вставки только id в БД

person Radesh    schedule 25.08.2019